問題タブ [reference-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.
objective-c - ブロック内の @synchronized(self) は保持サイクルにつながりますか?
@synchronized(self)
ブロック内でやりたいとしましょう。これは保持サイクルにつながると思うので、通常は次のように書き直します。
私の質問は、@synchronized
このようにディレクティブを使用する場合、それは同等@synchronized(self)
ですか?
methods - メソッドのクロージャーから強い参照サイクルを削除するには?
ここに、閉鎖の強い参照サイクルの例をいくつか示します。格納されたプロパティにクロージャーを割り当てると、クロージャー キャプチャ リストを使用して、キャプチャされた参照を非所有/弱にすることができます。しかし、格納されたプロパティ クロージャにメソッドを割り当てたり、外部スコープのクロージャにメソッドを割り当てたりすると、キャプチャ リストを使用できません。
最後の 2 つのケースで参照サイクルを削除するにはどうすればよいですか?
クロージャのみのキャプチャ リストで強い参照サイクルを作成して回避する例
メソッドからのクロージャーで強い参照サイクルを作成する例
メソッドからクロージャをexternから設定して強参照サイクルを作成する例
出力
「自己への強い参照による閉鎖」をテストします。
プロパティ「ClosureClass のデフォルト値」を持つオブジェクトが初期化解除されています
「メソッド intern でクロージャを設定」をテストします。
「extern メソッドでクロージャを設定」をテストします。
objective-c - 弱いポインターを強いポインターに割り当てると、オブジェクトがコピーされますか?
ブロック内で自己をキャプチャすることを回避する一般的なパターンは、ブロックの外側に弱い自己を作成し、これを使用してブロック内に自己の「ローカルに強い」バージョン (内部自己) を作成することです。
innserSelf creation
行が実行されるとどうなりますか? メソッドが に送信された時点で、selfinnerSelf
のコピーですか?methodThatTakesCompletionBlock:
someOtherObject
この質問は、innserSelf 行が実行されたときに何が起こるかに焦点を当てています。関連するブロック内の弱い参照への強い参照を見てきましたが、この点に対処していません。