私はXcodeのドキュメントを読んでいますが、これが私を困惑させるものです。
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
以下はドキュメントからコピーされたものです。
ブロックは、キャプチャする変数への強力な参照を形成します。ブロック内で使用する場合
self
、ブロックはへの強い参照を形成しますself
。したがってself
、ブロックへの強い参照もある場合(通常はそうなります)、強い参照サイクルが発生します。__block
サイクルを回避するには、上記の例のように、ブロックの外側に自分自身への弱い(または)参照を作成する必要があります。
__block
「弱い(または)」の意味がわかりませんか?
は
__block typeof(self) tmpSelf = self;
と
__weak typeof(self) tmpSelf = self;
ここでもまったく同じですか?</ p>
ドキュメントで別の部分を見つけました:
注:ガベージコレクション環境では、変数に
__weak
と__block
修飾子の両方を適用すると、ブロックはそれが存続することを保証しません。
だから、私は完全に困惑しています。