4
__weak参照と__block参照の違いは何ですか?
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修飾子の両方を適用すると 、ブロックはそれが存続することを保証しません。 だから、私は完全に困惑しています。