我的场景是,我使用 PhotoKit 从系统相册中选择一张照片并呈现在我的照片中UICollectionView
,然后将所选照片 ( UIImage
) 传递给我的下一张照片UIView
,并将其以NSData
. 但是当我在发送之前放置断点以跟踪时,NSData
我发现UIImage
有分配内存的数据而NSData
没有。
这是获取的代码UIImage
(请注意,我没有指定任何PHImageRequestOptions
对象):
NSMutableArray *images = @[].mutableCopy;
PHImageManager *manager = [PHImageManager defaultManager];
PHAsset *asset = _photoPickerCollectionView.pickedAsset;
CGSize targetSize = CGSizeMake(asset.pixelWidth*0.5, asset.pixelHeight*0.5);
[manager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info) {
_nextView.pickedOne = result;
}];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
我将其转换UIImage
为NSData
:
UIImage *image = _pickedOne;
NSData *imgData = UIImageJPEGRepresentation(image, imageQuality);
当我跟踪变量时,UIImage
包含的数据如下:
但是NSData
如下nil
:
奇怪的是,如果我为请求图像指定一个PHImageRequestOptions
对象,则不会是. 我不确定有没有改变了什么以及为什么会产生这样的差异。PHImageManager
NSData
nil
PHImageRequestOptions
更新:我发现,如果您指定PHImageRequestOptions
,nil
那么默认选项将强制它异步获取照片,在我看来,这可能是不稳定的NSData
,所以当我指定它时options.synchronous = YES;
它会起作用。
但在这种情况下,它会导致任何保留周期或某些PhotoKit
对象不会被释放吗?