ALAssetsLibrary resultBlock 弱引用或强引用

Posted

技术标签:

【中文标题】ALAssetsLibrary resultBlock 弱引用或强引用【英文标题】:ALAssetsLibrary resultBlock weak or strong reference 【发布时间】:2014-08-18 20:46:28 【问题描述】:

为了通话

[library assetForURL:referenceURL resultBlock:^(ALAsset *asset)...

如果我要将图像传递给 ImageView,我应该将 ImageView 传递给弱引用还是强引用?传递弱引用会出错吗?我的意思是弱引用

__weak MyVC *weakSelf = self; 
....
weakSelf.myImageView...

【问题讨论】:

【参考方案1】:

Block 保留它们引用的对象,进而创建一个保留循环。在您上面的代码 sn-p 中,该块创建了保留循环,您需要使用弱引用来打破保留循环

 __weak typeof(self) *weakself = self;

或者您也可以通过以下方式实现它

__block MyVC *blockSelf = self;

并引用块内的blockSelf。

这样就避免了循环,因为blockSelf没有被保留

【讨论】:

您在哪里看到保留周期? 据我了解,当您在块内引用 self.myImageView 时会发生保留周期,因为您指的是 self 将在此处保留 self 并且 self 本身保留了库,因为它是一个 ivar . 1) 你假设self 保留了库,2) 你假设library 保留了传递给assetForURL:resultBlock:failureBlock: 的块。第二个假设不太可能,因为如果ALAssetLibrary 使用实例变量来存储它,那意味着您不能同时执行两个请求,这是不正确的。

以上是关于ALAssetsLibrary resultBlock 弱引用或强引用的主要内容,如果未能解决你的问题,请参考以下文章

保存图像元数据 PHPhotoLibrary 与 ALAssetsLibrary

不推荐使用 ALAssetsLibrary 方法

ALAssetsLibrary.enumerateGroupsWithTypes Swift 中的第一个参数

无法链接 ALAssetsLibrary

从 ALAssetsLibrary 获取所有照片

ALAssetsLibrary 删除 ALAssetsGroup / ALAsset