0が返る、というよりはnilを格納するとアドレスからデータが消えると言ったほうがいいのかもしれません。
例1
まずはメモリを確保してアドレス値を出力してみます。NSData *data = [[NSData alloc]init]; // (1)
[data retain]; // (2)
NSLog(@"%d", [data retainCount]); // (3)
NSLog(@"%p", data); // (4)
(1)で、alloc/initし参照カウント1。
(2)で、retainして参照カウント+1。
(3)では、参照カウント2が出力。
(4)で、アドレスの値を出力。今回は0x71646e0と出ました。
例2
次にnilを入れて参照カウントとアドレス値を見てみます。NSData *data = [[NSData alloc]init]; // (1)
[data retain]; // (2)
NSLog(@"%d", [data retainCount]); // (3)
NSLog(@"%p", data); // (4)
data = nil; // (5)
NSLog(@"%d", [data retainCount]); // (6)
NSLog(@"%p", data); // (7)
(5)〜(7)が追加した部分です。
(5)で、インスタンスにnilを格納。
(6)で、参照カウントを出力。ここで0が出力。
(7)で、アドレス値を出力。0x0が出力。
おわり
参照カウントがいくつのときでもnilを格納すると、retainCount自体は0になります。そして、nilを格納するとメモリからそのオブジェクトが消滅します。また、nilを格納したインスタンスはいくらreleseしてもメモリリークはしないようです。もちろん参照カウントは0のままです。
0 件のコメント:
コメントを投稿