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;
ここでもまったく同じですか?
ドキュメントで別の部分を見つけました:
注:ガベージコレクション環境では、変数に
__weak
と__block
修飾子の両方を適用すると 、ブロックはそれが存続することを保証しません。
だから、私は完全に困惑しています。