我在NSMutableArray中投入太多了吗?请帮忙!

时间:2011-02-13 02:35:51

标签: iphone memory-management uiimageview size nsmutablearray

因此,我正在快速制作应用程序,即使它不是最佳解决方案,但它似乎在大多数情况下都有效。所以我有一个简单的图像视图,可以从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-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];
    }       

}
  }

内存管理似乎不是一个问题,但话说再说一遍,我不认为自己是专业人士......

1 个答案:

答案 0 :(得分:4)

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

  
      
  • 错误:ImageIO'ImageProviderCopyImageBlockSetCallback'   header不是CFDictionary ...
  •   
     

如果我打破了我的图像会有帮助吗?   进入单独的数组?我只是   把太多的东西放进阵列?什么   我在这里失踪了,相信我,我就是全部   耳朵。

这听起来更像是一个过度发布的问题,并且正在将一些虚假的东西传递给ImageIO API。

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

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

release是虚假的;它不会平衡代码中的任何位置。 objectAtIndex:不会返回保留的对象,而UIView会在内部保留/释放图像。

删除release(以及另一个)!

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

这些设备非常受内存限制。