【发布时间】:2014-07-25 19:56:26
【问题描述】:
我的 iOS 应用使用循环来循环浏览文件夹中的图像。 我的应用程序应该循环遍历文件夹内的总共 2031 张图像(大小为 1200x900)。图像以 8fps 的速度拍摄,每张图像都将在循环继续模拟视频剪辑时显示。在第 696 张图片之后,图像将停止在 UIImageView 中显示,尽管应用会继续循环。
我测试了一下是不是因为图片不存在导致断开了 我从图片 200 开始循环,但在图片 896 之后 UIImageView 停止显示图片。
代码:
imgName = [NSString stringWithFormat:@"subject_basline_mat k (%d).png",jojo];
jojo++;
imageToCrop.image = [UIImage imageNamed:imgName]; //imageToCrop is the name of the UIImageView image and it is set to the image file here
imageToCrop.image = [self imageWithImage:imageToCrop.image convertToSize:self.imageToCrop.frame.size]; //Here the image is converted to fit the bounds of the simulator which is 320x240
代码循环是由于一个计时器大约每 0.8 秒循环一次。
我用仪器运行我的代码以查看是否出现内存问题,并且仪器在我的计算机上非常重。因此,我的应用程序运行得很慢。但是,当我到达第 696 张图片时,这些图片一直在显示自己。就好像我的应用程序运行得太快导致图片无法显示......我不太明白。
图像切换中唯一占用大量内存的部分似乎是尺寸转换步骤,该步骤由以下行调用 imageToCrop.image = [self imageWithImage:imageToCrop.image convertToSize:self.imageToCrop.frame.size];
imageToCrop.image = [self imageWithImage:imageToCrop.image convertToSize:self.imageToCrop.frame.size];
“imageWithImage”方法在这里:
- (UIImage *)imageWithImage:(UIImage *)image convertToSize:(CGSize)size {
@autoreleasepool {
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return destImage;
}
还有线 [image drawInRect:CGRectMake(0, 0, size.width, size.height)];在应用程序中的所有图像管理中使用了最多的内存。
关于为什么我的应用只会显示一定数量的图像有什么想法吗?
【问题讨论】:
-
如果您对该问题投反对票,请告诉我原因,以便我可以改进问题或不再发布此类问题。谢谢!
-
R u 使用 ARC 并确保没有内存泄漏?
-
是的,我正在使用 ARC,据我在使用仪器时所见,没有内存泄漏。
-
您是否尝试过调整
0.8的第二个延迟以查看它是否会改变将显示的图像数量?这可能有助于缩小问题范围。 -
是的。我试过了,我的程序运行得越慢,显示的图片就越多。但是,出于我工作的目的,应用程序需要快速运行。所以,我不确定为什么一个较慢的程序在加载图片方面会比一个快速的程序做得更好。
标签: ios objective-c cocoa-touch uiimage