标题几乎涵盖了它。我理解为什么在块内使用weakSelf。
但想象一下我们有一个视图控制器的情况。视图控制器调用具有完成块的数据API(单例共享实例)。因此,在此调用中,VC提供了一个VC不能保存引用的完成块。 VC内部还有一个私有的便捷方法,可以对UI组件执行某些操作并调用self。 但是这个私有方便方法在块内调用。
所以我知道,我也应该在便捷方法中使用weakSelf吗?
答案 0 :(得分:1)
在任何地方使用weakSelf
模式:
否则你会有一个强大的参考周期;
您正在使用可取消的异步任务,并希望在dealloc
中取消它们;或
如果视频控制器在异步调用仍在进行时被解除,则不希望在异步调用期间保留它。
后一点意味着可以将weakSelf
模式与异步方法的完成块结合使用,无论是否存在强引用循环。问题是,即使视图控制器已被解除,您是否需要在异步调用期间保留视图控制器。
答案 1 :(得分:1)
如果我理解正确,您不会将该块存储到self
的属性中(或存储到引用self
的对象中,依此类推)。所以没有理由使用weakSelf
,因为无法构建保留周期。