我的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)];在应用程序的所有图像管理中使用大部分内存。
为什么我的应用只显示一定数量的图片?
答案 0 :(得分:1)
几乎可以确定您的问题是[UIImage imageNamed:imgName]
。这里有数百篇关于使用它的陷阱的帖子。问题在于它会缓存图像 - 它的真正目的是为了包中的一些少量图像。
如果您有大量图像,请获取图像的路径,然后通过URL或文件指针获取图像。这样就不会缓存了。请注意,当您执行此操作时,会自动失去自动" get-retina-image-",因此您需要根据设备是否为视网膜来获取适当大小的图像。
答案 1 :(得分:1)
尝试按网址从应用包中加载完整尺寸的图片。例如:
@autoreleasepool {
NSString *imgName = [NSString stringWithFormat:@"subject_basline_mat k (%d)",jojo];
NSURL *imageURL = [[NSBundle mainBundle] URLForResource:imgName withExtension:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:[imageURL path]];
imageToCrop.image = [self imageWithImage:image convertToSize:self.imageToCrop.frame.size];
}