オブジェクトメソッドが完了引数としてブロックを受け取るときの私の理解から、ブロックで「自己」を送信できます。
[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];
};
そして、この最後のバリアントを実行する理由/時期が明確ではありません