3

いくつか質問があります。

1)参照カウントを減らすために解放する必要がないため、割り当てプロパティはどこでメモリを消費しますか?

2) オートゼロ基準と非オートゼロ基準の違いは何ですか?どのように機能しますか? どのように記憶をとりますか?

4

2 に答える 2

27

参照はオブジェクトに適用されます (参照カウントとすべてのものがあります) が、弱参照は参照カウントを増加させません。ただし、オブジェクトの割り当てが (コード内のどこからでも) 解除されると、そのオブジェクトへの弱参照はすべて に設定されnilます。強い参照と弱い参照のみを使用すると、無効なポインター (既に割り当て解除されたオブジェクトへのポインター) になることがないため、これは非常に便利です。

assignは参照に対してまったく何もしません。通常、int、float、およびその他の非オブジェクト型に使用されます。もちろん、そのような変数にオブジェクト参照を割り当てることはできますが、オブジェクトの割り当てが解除された場合でも、そのメモリへのポインターが残ります (これは今ではゴミであり、使用すると問題が発生します)。

「メモリの使用」に関するあなたの懸念は奇妙です-参照はメモリを使用せず、オブジェクトは使用します。ただし、オブジェクトを使用する場合、オブジェクトの割り当てを解除することはできません。初心者向けの簡単なルールは、オブジェクトについては、可能な限り強力な参照を使用することです。強い参照を使用しない理由がある場合は、弱い参照を使用します (通常はデリゲートとデータソースに対して)。プリミティブ型 (int、float、CGRect など) の場合は、オブジェクトではないため、割り当てを使用します。

于 2012-10-12T14:30:57.053 に答える
8

assignは似weakていますが、ポインタがヒープを離れるときにポインタがゼロになることはありません。したがって、それは。ほど安全ではありませんweak

于 2013-02-20T09:03:05.303 に答える