2011-02-13 23 views
3

因此,我正在制作一个应用程序非常快,即使它不是最好的解决方案,它似乎大部分工作。所以我有一个简单的图像视图,它将图像从NSMutableArray中取出。我创建阵列并以这种方式来填充它的viewDidLoad内:我是否在我的NSMutableArray中放了太多?请帮忙!

arr = [[NSMutableArray alloc] init]; 

[arr addObject:[UIImage imageNamed:@"181940jpg"]]; 
[arr addObject:[UIImage imageNamed:@"168026.jpg"]]; 
[arr addObject:[UIImage imageNamed:@"168396.jpg"]]; 
[arr addObject:[UIImage imageNamed:@"168493_.jpg"]]; 

和我继续做这一行的130张图像。显然这是一个很大的阵列。我不知道这是否是一种非常糟糕的做法,但如果是这样,我乐于接受建议!当我用一些简单的后退和前进按钮浏览数组时,基于一个简单的计数器变量将图像从数组中拉出,事情工作正常,直到图像45-ish。该应用程序分解和控制台这样说:

*错误:ImageIO的“ImageProviderCopyImageBlockSetCallback”头是不是CFDictionary ...

它是否有助于如果我打破了我的图片到独立阵列?我只是把太多的数组放入?我在这里想念的是什么,相信我,我是耳朵。

感谢

编辑:这里是一些更多的信息

这是我如何通过阵列筛选,使用一个UISegmentedControl在屏幕上方设置:

-(void) pickedOne{ 
if(segmentedControl.selectedSegmentIndex == 1){ 
    NSLog(@"hey"); 
    if(position < [arr count]-1){ 

     position++;//This is my global counter variable 
     UIImage * img = [arr objectAtIndex:position]; 
     [imageView setImage:img]; 
     [img release]; 
    }  

}else if(segmentedControl.selectedSegmentIndex ==0){ 

    if(position >0){ 

     position--; 
     UIImage * img = [arr objectAtIndex:position]; 
     [imageView setImage:img]; 
     [img release]; 
    }  

} 
    } 

一点也没有这似乎不是一个内存管理的问题,但再次,我不认为自己是一个亲在那以任何方式...

+0

我想你需要提供更多关于你的实现的细节。定义一个NSMutable不会太小,因为它没有预定义的大小。我认为你的问题更多的是你如何访问和发布价值。如果你设法创建你的数组,那么它不会太大。 –

回答

4

就可变a rray,你放入它的只是一个指向其他对象的指针。这是你必须担心的其他物体,是的,你有太多的物体(更可能不是)。

  • ERROR: ImageIO 'ImageProviderCopyImageBlockSetCallback' header is not a CFDictionary...

Would it help if I broke my images up into separate arrays? Am I just putting too much into the array? What am I missing here, trust me, I am all ears.

这听起来更像是你有一个过度释放的问题,并且正在向ImageIO API传递一些伪造的东西。

而且,事实上,这正是你所拥有的:

UIImage * img = [arr objectAtIndex:position]; 
    [imageView setImage:img]; 
    [img release]; 

release是虚假的;它不会在代码中的任何地方平衡保留。 objectAtIndex:不会返回保留的对象,并且UIView将负责在内部保留/释放图像。

删除release(和另一个)!

您仍然需要担心内存消耗。在每个大小为42K(不是不合理的大小,但完全组成)的情况下,在进行任何作为存储的一部分的减压或其他扩展之前,130张图像的重量约为6MB左右。

这些设备内存受限。

相关问题