PhotoKit:使用requestImageForAsset使用PHImageManagerMaximumSize获取资产时崩溃[资产被中断或死亡]

时间:2015-02-28 06:06:39

标签: ios crash photokit

我正在尝试使用UIPageViewController显示Image,使用来自apple的示例代码并将其替换为新的照片工具包:PHAsset https://developer.apple.com/library/ios/samplecode/MyImagePicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010135 当我用PHImageManagerMaximumSize扫描照片时,我发现在50张照片后,应用程序将崩溃,显示“资产中断或死亡”。但如果我要求更小的目标尺寸(与屏幕大小相同),则崩溃变得不太可能。我想知道我的应用程序中是否存在内存泄漏或渲染系统出现问题?似乎压缩和解压缩使用了很多页面。谁能帮我看看?

- (void)displayImage:(PHAsset*)asset
{
 [self.imageView removeFromSuperView]
 self.imageView = nil;
 [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage *result, NSDictionary *info) {

        self.imageView = [[UIImageView alloc] initWithImage:result];
        self.imageView.contentMode = UIViewContentModeScaleAspectFit;
        // self is a scrollView    
        [self addSubview:self.imageView];
    }];
}

------登录控制台----------

2015-02-27 22:35:20.613 XXX [2831:145514] ImageViewController, - [ImageViewController didReceiveMemoryWarning] 2015-02-27 22:35:22.111 XXX [2831:145558]资产连接中断或资产死亡

-------崩溃日志---------

免费页面:1361 活动页面:26954 非活动页面:13499 推测页面:40 限制页面:0 可清除页面:0 有线页面:59258 文件支持的页面:11321 匿名页面:29172 压缩:6474001 减压:704086 压缩机尺寸:151510 Compressor中未压缩的页面:212409 页面大小:16384 最大的过程:iGather

流程      名称| | CPU时间| rpages |可清除| recent_max | lifetime_max | fds | [原因] | (状态)

assistant_servic< 97db64323f2e364ea0af497680126850> 0.485 1451 0 - 4111 50 [vm-pageshortage](守护进程)(空闲)    medialibraryd< 6a42c5e99f153b4baa0992e9902bee82> 0.296 1037 0 - 2072 50 [vm-pageshortage](守护进程)(空闲) WirelessRadioMan 0.077 285 0 - 890 50 [vm-pageshortage](守护进程)(空闲)             awdd< 58036e1703903ee798a8803de204c300> 0.070 402 0 - 1043 50 [vm-pageshortage](守护进程)(空闲)          assetsd< 276c271c5b073f58bf87c49abf22b264> 0.188 679 0 - 1907 50 [vm-pageshortage](守护程序)(空闲)             seld< 18863ab32c7634d5b7f200821acffd06> 0.030 193 0 - 696 50 [vm-pageshortage](守护进程)            传递< 56971afa88b53f05a37688cad47b4160> 0.243 630 0 - 2384 50 [vm-pageshortage](守护进程)             nfcd< 59e46913bec838d989d5bed82cb05791> 0.023 184 0 - 624 50 [vm-pageshortage](守护进程)    biometrickitd< 71607be9393c366eb1bbe281256fde77> 0.141 273 0 - 841 50 [vm-pageshortage](守护进程)      debugserver 0.306 207 0 - 629 50 [vm-pageshortage](守护进程)       MobileMail< 4b48abd990e93dbea47db1cbf328da9e> 0.957 1496 0 - 4063 50 [vm-pageshortage](简历)(连续)              lsd 1.213 364 0 - 1032 50 [vm-pageshortage](守护进程)             [登录]              kbd< 8c8bded31cf73db2b44aa996c0e90921> 0.116 344 0 - 1447 50 [vm-pageshortage](守护进程)          iGather 3.610 23061 0 - 21099 50 [vm-pageshortage](最前面)(简历) ...

1 个答案:

答案 0 :(得分:2)

您绝对应该使用Instruments来确认这一点,但我发现即使使用ARC,您在处理一批照片时也必须对内存使用保守。

和我一样,我想为用户提供最高质量的图像,以便他们可以放大并详细检查照片。我在网格中显示N张照片。我发现即使摆脱了对这些资产的所有引用,它们也不会在下一组N被加载之前被释放。我只需要减少一半的内存使用量,以便N * 2在内存中的短暂转换不会导致我的应用程序崩溃。

当然,如果您的内存使用量越来越单调,那么您可能在代码中的某些位置存在对这些图像的幸存引用。仪器。