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