据我了解,当对象方法接收块作为完成参数时,我可以在块中发送“self”:
[object doMethodWithCompletion:^{
[self doSomethingWhenThisMethodCompletes]
}];
但是如果这个对象“保留”了这个块(保存它以备将来使用)我应该发送一个我自己的“弱”副本:
__weak __typeof__(self) weakSelf = self;
object.savedBlock = ^{
[weakSelf doSomethingWhenThisBlockIsCalledFromWithinObject];
};
但我也看到了变体,例如:
__weak __typeof__(self) weakSelf = self;
object.savedBlock = ^{
__typeof__(weakSelf) strongSelf = weakSelf;
[strongSelf doSomethingWhenThisBlockIsCalledFromWithinObject];
};
我不清楚为什么/何时做最后一个变种