因此,我正在快速制作应用程序,即使它不是最佳解决方案,但它似乎在大多数情况下都有效。所以我有一个简单的图像视图,可以从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];
}
}
}
内存管理似乎不是一个问题,但话说再说一遍,我不认为自己是专业人士......
答案 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左右,在任何减压或其他扩展作为存储的一部分之前。
这些设备非常受内存限制。