私は
@property(retain) NSString* test;
実装ファイルで合成されます。
デアロックでは、これらの両方が正しいかどうか?
self.test = nil;
と
self.test = @"";
nilと@""のretainCountをログに記録すると、それぞれ0と-1として出力されました。
両方が同じ結果をもたらすかどうかを知りたいだけです。
前もって感謝します。
私は
@property(retain) NSString* test;
実装ファイルで合成されます。
デアロックでは、これらの両方が正しいかどうか?
self.test = nil;
と
self.test = @"";
nilと@""のretainCountをログに記録すると、それぞれ0と-1として出力されました。
両方が同じ結果をもたらすかどうかを知りたいだけです。
前もって感謝します。
まず、retainCountを何にも使用しないでください。それはあなたに嘘をつきます。次に、保持カウントは符号なしであるため、「-1」は実際には「可能な最大の保持カウント」を意味します。これは、保持と解放がそのオブジェクトに対して何もしないことを意味する値です。第三に、nilで任意のメソッドを呼び出すと、nil/0が返されます。
これで問題は解決しました。nilと@""は同じではありません。nilはアドレス0へのポインタであり、「オブジェクトなし」を表します。@ ""は完全に有効なNSStringオブジェクトであり、たまたま文字が含まれていません。
いいえ、プロパティを常にnilに設定する必要があります。これは、プロパティがメモリから解放される一方で、実際にはゼロ文字の文字列を作成しているためです。
理解を深めるには、[this]を読むことができます:http://macdevelopertips.com/objective-c/objective-c-memory-management.html