私は__block variablesのドキュメントを読んでいて、__blockを使用している場合について考えていました。私にとって、私が2つの場合に、それを必要とするように思える:__block変数が保持されないのはなぜですか(非ARC環境の場合)?
- は、読み書きなどの変数をマークするにはブロック内で自己を参照するときにサイクルを維持避けるためにブロック
- 内で使用する場合
表面には、これら2つのものが関連しているようには見えません。私は、__block変数が、保持サイクルを避ける特定の使用例について覚えておく必要があるより多くのトリックとして保持されないという事実を考慮します。
なぜ、それらを保持してはいけないのか、より重要な、建築上の理由はありますか?上記の2つの機能を混在させないように、これを明確にするためのキーワードがあると思います。
更新 -
これは、ARCを使用しないコードです。 __block変数が実際にARCに保持されていることがわかりました。
最初のものにのみ '__block'を使用します。保持サイクルを避けるために '__block'ではなく' __weak'を使います。 – rmaddy
また、__block変数が保持されないという考えをどこから得ましたか? ARCは通常の変数と同様に自動的にそれらを保持します。 –
ARCの前に、__block変数は実際に保持サイクルを回避するためのメカニズムとして保持されていませんでした。それはARCによって変更され、「ARCリリースノートへの移行」に記載されています。 –