我想列举我的相册,但是当我在我的设备上测试该应用时,应用程序会在30秒后崩溃。当我使用Instrument时,我发现ARC不会自动释放资产,因此每次处理图像时,它都会分配图像大小。我的主要目标是仅显示设备的屏幕截图。所以假设我有1000张照片,30张图片后我得到30MB的分配,这会导致崩溃。如何明确释放内存?
这是我的代码:
[self.assetsGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
ALAssetRepresentation* representation = [result defaultRepresentation];
// Retrieve the image orientation from the ALAsset
UIImageOrientation orientation = UIImageOrientationUp;
NSNumber* orientationValue = [result valueForProperty:@"ALAssetPropertyOrientation"];
if (orientationValue != nil) {
orientation = [orientationValue intValue];
}
CGFloat scale = 1;
UIImage* image = [UIImage imageWithCGImage:[representation fullResolutionImage]
scale:scale orientation:orientation];
if ( image.size.height/2==screenHeight && image.size.width/2==screenWidth)
[self.assets addObject:result];
}
}];
我认为默认表示会导致malloc。
提前致谢...
答案 0 :(得分:2)
您已经发现UIImage对象在创建时可以占用 lot 的内存。
为什么不使用ALAsset为您提供的不会占用内存的API,而不是创建UIImage对象。例如,您可以获取图像dimensions
(我已经为您链接了Apple文档)。
此外,这一行:
if ( image.size.height/2==screenHeight && image.size.width/2==screenWidth)
对我来说似乎有点危险。除非您控制所有正在加载的图像,否则任何全分辨率图像很可能与屏幕高度和宽度的1/2完全不同。