__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需要进行哪些更改。
答案 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。