ios - PhotoKit:使用 requestImageForAsset 通过 PHImageManagerMaximumSize 获取 Assets 时崩溃 [assetsd 被中断或死亡]

标签 ios crash photokit

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

- (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] 与 assetsd 的连接被中断或 assetsd 死亡

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

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

流程
姓名 | | CPU时间| rpages|可净化|最近_最大|生命周期_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](守护进程)
passd <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](守护进程)
调试服务器 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](守护进程)
tccd 0.132 238 0 - 593 50 [vm-pageshortage](守护进程)
kbd <8c8bded31cf73db2b44aa996c0e90921> 0.116 344 0 - 1447 50 [vm-pageshortage](守护进程)
iGather 3.610 23061 0 - 21099 50 [vm-pageshortage](最前面)(简历)
...

最佳答案

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

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

当然,如果您的内存使用越来越单调,那么您可能确实在代码中的某处对这些图像有幸存的引用。再次,仪器。

关于ios - PhotoKit:使用 requestImageForAsset 通过 PHImageManagerMaximumSize 获取 Assets 时崩溃 [assetsd 被中断或死亡],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778745/

相关文章:

android - 如何与 Adob​​e Air 的锁屏播放器控件集成?

ios - AVPlayerPeriodicCaller 崩溃

vba - 尝试任何与 VBA 相关的操作后 Excel 崩溃

调用函数两次后 C++ .exe "has stopped working"

php - 如何故意在 PHP 脚本中造成 fatal error ?

ios - PHAsset 在 PHAssetChangeRequest 完成后不反射(reflect)变化

ios8 - 如何从PHAsset获取ALAsset URL?

ios - 应用自动布局后如何获取 UIImageView 大小?

ios - UITextView 初始滚动位置不为 0

ios - 将元数据应用于图像会导致 performChanges 请求失败