为什么要在块内保留自我增加的数量?

时间:2015-04-26 03:41:17

标签: objective-c-blocks

__block typeof(self) selfPointer = self;

[StudentClass callComputerScienceStudent:dept
    completionBlock:^(Department *dept) {
        [selfPointer getEntry:dept];
    }
    errorBlock:^(Department *dept) {
        [selfPointer deleteEntry:dept];
    }];

此处self保留计数为2.且selfPointer为readonly。 使selfPointer读写而不是readonly需要进行哪些更改。

1 个答案:

答案 0 :(得分:1)

阻止在其上下文中使用的捕获变量。如果您想避免捕获强引用,可以执行以下操作: __weak typeof(self)weakSelf = self;

[StudentClass 
    callComputerScienceStudent:dept 
    completionBlock:^(Department *dept) { 
        [weakSelf getEntry:dept];
    } 
    errorBlock:^(Department *dept) {
        [weakSelf deleteEntry:dept];
    }];

这确保了在块中仅使用self的弱引用。

此外,正如@mttrb在评论中指出的那样,使用retainCount绝对不可靠。为了避免块的内存问题,我建议你阅读great article