14

ウィキペディアは、「コンピュータープログラミングでは、弱参照は、参照されたオブジェクトをガベージコレクターによる収集から保護しない参照です」と述べています。これらの2つのタイプの参照は、コードではどのように見えますか?弱参照は、自動解放されたメッセージによって作成された参照ですか?

4

2 に答える 2

16

次の回答は、ガベージ コレクションがない場合 (iOS など) の場合です。ガベージ コレクションの場合、実際には__weak弱参照を作成するためのキーワード ( ) があります。

「弱い」参照とは、保持しない参照です。

サイクルを分割するには、これらの弱参照を使用する必要があります。一般的なケースは、親オブジェクトへの参照を必要とする子オブジェクトです。このシナリオでは、親は子オブジェクトへの参照を保持し、子オブジェクトはその親への参照を保持しますが、保持しません。親オブジェクトが存在する限り、子オブジェクトが存在する必要があるだけなので、これは機能します。

弱い参照は、自動解放されたメッセージによって作成された参照ですか?

そうではありません、それは「非常に弱い参照」になります;-)

自動解放されたものは、呼び出しスタックが巻き戻されると消えます (たとえば、すべてのイベント ループの最後に)。一時的ではないものが必要な場合は、参照を保持する必要があります (または、上記の場合のように、他の部分がそれを十分に保持していることを確認してください)。

于 2011-09-05T10:24:55.817 に答える
6

弱い参照は、オブジェクトを強制的にメモリに残すほど強くない参照ですが、強い参照はオブジェクトを強制的にメモリに残します。

任意の変数への弱い参照を作成した場合、そのために nil が返されることがあります。

UITableViewDelegateUIScrollViewDelegateなどは弱参照の例です。

強い参照の例:

MyClass *obj1 = [[Myclass alloc] init];

Myclass *obj2 = obj1;

ここには、メモリから削除すると削除されることを意味するobj2強い参照があります。obj1obj2obj1

于 2011-09-05T10:27:50.073 に答える