我正在接收内存泄漏并最终在处理应用程序时出现内存不足警告,该应用程序需要循环浏览许多大图像以响应用户在屏幕上拖动。为了做到这一点,我通过以下代码用新图像更新每个更改:
@property (nonatomic) IBOutlet UIImageView *rotationView;
.
.
.
// Update the displayed image to the specified image index. Loads one image at
// a time and lets ARC handle release of old images.
-(void) displayNewImage:(int)imageIndex {
// Initialize rotation image string (to be used when loading the image)
NSMutableString *rotationImage = [[NSMutableString alloc] init];
[rotationImage setString:[self rotationImagePrefix]];
[rotationImage appendString:[NSString stringWithFormat:@"%05d",imageIndex]];
[self.rotationView setImage:[UIImage imageNamed:rotationImage]];
}
我发现类似的帖子表明使用+ [UIImage imageNamed:]存在已知的内存泄漏,并建议使用+ [UIImage imageWithContentsOfFile:]但是这两种方法似乎都没有积极地影响性能。用+ [UIImage imageWithContentsOfFile:]进行测试实际上看到了内存泄漏的显着增加。
这是在使用imageNamed时。下拉列表中的每个malloc实例是7.00 KB引用的另一个实例。使用imageWithContentsOfFile看到这些泄漏在同一测试中翻了两番,告诉我imageWithContents没有缓存内容,而是每次创建新的实例,这是预期的。这里的一个问题是,当需要创建新图像时,如何在下一个周期发布此图像。
我发现的所有类似问题似乎都证实这是ImageIO库中已知的内存泄漏。对于这方面是否有经过验证的解决方案,或者我们是否仍然坚持使用Apple提供的UI框架,错误和所有内容?