ARC, ivars in Blocks and Reference Cycles via Captured Self

前端 未结 2 1473
忘了有多久
忘了有多久 2020-12-23 11:51

I’m working in a pure iOS5/ARC environment, so I can use __weak references as needed. I do reference ivars in a block in many situations, most notably, animation blocks that

相关标签:
2条回答
  • 2020-12-23 12:49

    The case to worry about is something like addObserverForName:object:queue:usingBlock:. The docs say, "The block is copied by the notification center." Under ARC, that word "copy" is a red flag; now you need to take steps so that you (the caller) will not leak.

    EDIT: Also, sometimes ARC itself will alert you. The completion block of -[UIPageViewController setViewControllers:direction:animated:completion:] is a case in point. I would never have suspected that using self here might cause a retain cycle, but ARC warned that it would, so I did the weak-strong dance just in case.

    0 讨论(0)
  • 2020-12-23 12:56

    There is only a cycle here if self then goes on to hold a reference to the block (or something owned by self). If not you're good to go as the lifetime of the block is not dictated by the self it retained.

    So in your particular example, you seem to be in the clear. Animation blocks don't need to participate in the weak/strong self dance.

    0 讨论(0)
提交回复
热议问题