ウィキペディアは、「コンピュータープログラミングでは、弱参照は、参照されたオブジェクトをガベージコレクターによる収集から保護しない参照です」と述べています。これらの2つのタイプの参照は、コードではどのように見えますか?弱参照は、自動解放されたメッセージによって作成された参照ですか?
2 に答える
次の回答は、ガベージ コレクションがない場合 (iOS など) の場合です。ガベージ コレクションの場合、実際には__weak
弱参照を作成するためのキーワード ( ) があります。
「弱い」参照とは、保持しない参照です。
サイクルを分割するには、これらの弱参照を使用する必要があります。一般的なケースは、親オブジェクトへの参照を必要とする子オブジェクトです。このシナリオでは、親は子オブジェクトへの参照を保持し、子オブジェクトはその親への参照を保持しますが、保持しません。親オブジェクトが存在する限り、子オブジェクトが存在する必要があるだけなので、これは機能します。
弱い参照は、自動解放されたメッセージによって作成された参照ですか?
そうではありません、それは「非常に弱い参照」になります;-)
自動解放されたものは、呼び出しスタックが巻き戻されると消えます (たとえば、すべてのイベント ループの最後に)。一時的ではないものが必要な場合は、参照を保持する必要があります (または、上記の場合のように、他の部分がそれを十分に保持していることを確認してください)。
弱い参照は、オブジェクトを強制的にメモリに残すほど強くない参照ですが、強い参照はオブジェクトを強制的にメモリに残します。
任意の変数への弱い参照を作成した場合、そのために nil が返されることがあります。
UITableViewDelegate
、UIScrollViewDelegate
などは弱参照の例です。
強い参照の例:
MyClass *obj1 = [[Myclass alloc] init];
Myclass *obj2 = obj1;
ここには、メモリから削除すると削除されることを意味するobj2
強い参照があります。obj1
obj2
obj1