当我们通过块调用时,我应该在私有方便方法中使用weakSelf吗?

时间:2015-07-02 11:18:49

标签: objective-c objective-c-blocks

标题几乎涵盖了它。我理解为什么在块内使用weakSelf。

但想象一下我们有一个视图控制器的情况。视图控制器调用具有完成块的数据API(单例共享实例)。因此,在此调用中,VC提供了一个VC不能保存引用的完成块。 VC内部还有一个私有的便捷方法,可以对UI组件执行某些操作并调用self。 但是这个私有方便方法在块内调用。

所以我知道,我也应该在便捷方法中使用weakSelf吗?

2 个答案:

答案 0 :(得分:1)

在任何地方使用weakSelf模式:

  • 否则你会有一个强大的参考周期;

  • 您正在使用可取消的异步任务,并希望在dealloc中取消它们;或

  • 如果视频控制器在异步调用仍在进行时被解除,则不希望在异步调用期间保留它。

后一点意味着可以将weakSelf模式与异步方法的完成块结合使用,无论是否存在强引用循环。问题是,即使视图控制器已被解除,您是否需要在异步调用期间保留视图控制器。

答案 1 :(得分:1)

如果我理解正确,您不会将该块存储到self的属性中(或存储到引用self的对象中,依此类推)。所以没有理由使用weakSelf,因为无法构建保留周期。