0

重複の可能性:
-retainCount をいつ使用するか?

自動解放プールを理解しようとしていました。以下のようなサンプルアプリケーションを作成しました。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *releasePoolString = [[[NSString alloc] initWithFormat:@"%@",@"ReleasePool autorelease variable"] autorelease];

NSLog(@"Retain count of autorelease variable inside release pool %i",[releasePoolString retainCount]);

[pool drain];

// After pool drain still retain count = 1 ??????
NSLog(@"Retain count of autorelease variable after release pool drain %i",[releasePoolString retainCount]);

最後のログにはまだ保持カウントが 1 として出力されています。

ありがとう...

4

2 に答える 2

4

1 で release が呼び出されると、retainCount をデクリメントせずにすぐに dealloc を呼び出すため、retainCount が 0 になることはありません。

于 2012-08-11T09:45:31.563 に答える
0

保持カウントは常にオブジェクトの正確な保持カウントを提供しないためです。retainCountメモリ管理を API に依存しないでください。オブジェクトを割り当てて保持すると、そのオブジェクトを解放する必要があり、その保持カウントはゼロになります。

于 2012-08-11T09:39:01.780 に答える