問題タブ [retain-cycle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - ネストされたブロック内で弱い自己を参照する
を使用してすでに弱い自己を作成しているとします
そのブロック内で、別のブロックをネストすると:
保持サイクルを作成しますか?weakSelf への別の弱い参照を作成する必要がありますか?
objective-c - ブロック内の obj-c の弱い自己: 2 つの同様のケースで、2 番目のブロックが内部に弱い自己を必要としない理由
ブロック内で自分自身を強く参照することによって、メモリのバグが発生することが最終的にわかりました。しかし、同様のケースでなぜ弱いものが必要ないのかわかりません。
画像キャプチャ タスクを実行する CameraCaptureManager クラスがあり、CameraViewController にはこのマネージャーの強力なプロパティがあります。マネージャーには、コントローラーを指す弱いデリゲート プロパティがあります。
これは、マネージャーで weakSelf を使用する必要がある場所です。そうしないと、-(void)dealloc が呼び出されません。
マネージャーは deviceOrientationDidChangeObserver を強力に保持するため、メモリ保持サイクルを中断するには、weakSelf が必要です。それは結構です、私はそれを手に入れました...しかし、同じクラスの同様のケースでweakSelfを使用していないことがわかりました:
マネージャーも stillImageOutput を強力に保持していますが、なぜ完了ブロックで強力な「自己」を使用できるのでしょうか? マネージャー オブジェクトは、ブロック内でこの強力な自己との割り当てを解除します。私は混乱しています、いくつかの光を当ててください。
また、保持サイクルが発生しない場合でも、2番目のケースでweakSelfを使用する必要がありますか?
objective-c - 「保持されたブロック プロパティはブロックをコピーしません - 代わりにコピー属性を使用してください
私は JavaScript 指向の経験が豊富で、できる限り Objective-C に移行しています。当然のことながら、次のようなクロージャ関数をソース コードで利用する機会にいつも飛びつきます。
ただし、これを Xcode に書き出すたびに、次の警告が表示されます。
保持されたブロック プロパティはブロックをコピーしません - 代わりにコピー属性を使用してください
ARC のおかげで、Objective-C で手動で保持する必要がなくなったというのが私の理解でした。ブロックごとにクロージャー関数を参照していると仮定しているので、解釈できる限り、この変数を割り当てることがわかります。
また、someMethod が保持されるため、someMethod の所有者が存在し続けますか? 私はそれを正しく理解しましたか?
これによる悪影響は何ですか?ブロックを「コピー」すると、 someMethod の所有者が破棄されることを許可しないので、「self」を参照するたびにクロージャーメソッド自体内に存在しなくなりますか? 私のクロージャーメソッドが非常に些細なことをしていないか、メンバー変数やメソッドを参照していないことをしていない限り、ほとんどの場合ブロックを保持したくないですか?
ios - iOS の GCD ブロック内の自己へのアクセス
このようにビュー アニメーション API 内のセルフ オブジェクトにアクセスすると、
これは保持サイクルにつながりますか?
ありがとう