2

只是好奇是否有使用 NSLog 显示对象保留计数。我只想将它们打印到控制台以帮助了解保留/释放如何在一些简单的代码中工作?

干杯-加里-

4

3 回答 3

9

不仅有可能,而且非常简单:

NSLog(@"retain count=%d",[obj retainCount]);
于 2009-09-10T20:25:58.610 回答
2

我认为您可能会遇到 NSString 的问题,其中保留和释放消息可以发送到字符串常量,但它们实际上没有任何效果,也不会改变对象的 retainCount。下面的代码有效,将其更改为使用 NSString 并保留/释放无效。

代码:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSMutableString *myString = [[NSMutableString alloc] initWithString:@"AB"];
    NSLog(@"RC: %d", [myString retainCount]);
    [myString retain];
    NSLog(@"RC: %d", [myString retainCount]);

    [myString release];
    NSLog(@"RC: %d", [myString retainCount]);
    [myString release];

    [pool drain];
    return 0;
}

输出:

Running…
TESTBED[12306:a0f] RC: 1
TESTBED[12306:a0f] RC: 2
TESTBED[12306:a0f] RC: 1

加里

于 2010-01-05T16:05:30.107 回答
0

在调试器控制台中,您可以键入: print (unsigned int)[thing retainCount]

于 2009-09-10T20:26:45.850 回答