iphone - 我是否在 NSMutableArray 中放入了太多内容?请帮忙!

标签 iphone memory-management uiimageview size nsmutablearray

所以我正在非常快地制作一个应用程序,尽管它不是最好的解决方案,但它似乎在大多数情况下都有效。所以我有一个简单的 ImageView ,可以从 NSMutableArray arr 中提取图像。我创建数组并以这种方式将其填充到 ViewDidLoad 内部:

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 左右。应用程序崩溃了,控制台显示如下:

* 错误:ImageIO 'ImageProviderCopyImageBlockSetCallback' header 不是 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];
    }       

}
  }

这似乎不是内存管理的问题,但话又说回来,我无论如何都不认为自己是这方面的专家......

最佳答案

就可变数组而言,您放入其中的只是指向其他对象的指针。您必须担心的是那些其他对象,是的,您有太多这些对象(更有可能)。

  • 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];

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

删除该版本(以及另一个版本)!

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

这些设备的内存非常有限。

关于iphone - 我是否在 NSMutableArray 中放入了太多内容?请帮忙!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982076/

相关文章:

iphone - 以编程方式将显示 image1 的 UIImageView 更改为 image2

iphone - 我在使用阴影效果时表现不佳

c - 从 strtok 返回的 token 的生命周期

c++ - Visual Studio 2010 C++ : malloc()/HeapAlloc always allocates new page for even smallest alloc size

ios - UIImage View 不显示图像

ios - 在 ios 中的 ImageView 上显示图钉

iphone - 如何使用 Storyboard呈现启动/登录 View Controller

ios - 是否可以导出 Xamarin 应用程序并在实际的 iPhone 设备上进行测试

javascript - 从 jQTouch/Phonegap iPhone 应用程序发布 Twitter 和 Facebook 更新

iOS 不断增长的内存使用量