为强指针指定弱指针是否复制了对象?

时间:2016-10-08 23:29:34

标签: objective-c memory-management automatic-ref-counting objective-c-blocks reference-cycle

避免在Block中捕获self的常见模式是在Block之外创建一个弱自我,并使用它来创建一个"本地强大的" Block中的self版本(内部自我)。

__weak ClassX *weakSelf = self;
[someOtherObject methodThatTakesCOmpletionBlock: ^{

             ClassX innserSelf = weakSelf; //innserSelf creation?     
             [someObject send:innerSelf.prop;}];

innserSelf creation行执行后会发生什么?方法innerSelf发送到methodThatTakesCompletionBlock:时,someOtherObject副本吗?

这个问题只关注执行innserSelf线时会发生什么。我看过Strong reference to a weak references inside blocks这是相关的,但没有解决这一问题。

2 个答案:

答案 0 :(得分:2)

考虑:

other

other复制块时,没有强引用。

strongSelf执行块时,则在块执行开始时创建强引用。块完成后,执行范围消失,因此other引用被破坏。

strongSelf是否挂在街区上是无关紧要的; {{1}}引用仅在块执行期间存在

答案 1 :(得分:0)

将弱指针指定给强指针不会复制该对象。两个指针都指向同一个对象。强指针保留,因此为保留计数增加+1。弱指针不会改变保留计数