2009-09-10 58 views

回答

9

它不仅是可能的,这是非常容易的事:

NSLog(@"retain count=%d",[obj retainCount]); 
+4

注意保留计数的实现细节,他们可以和方式,使没有意义的外部观察者做的工作。换句话说,这不是特别有用的事情。更好地阅读内存管理指南(https://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/index.html)并遵循简单的所有权规则。 – Chuck 2009-09-10 20:35:13

+0

在技术上它应该是%u,因为retainCount返回一个NSUInteger(实际上它永远不会变得足够重要,尽管如此) – newacct 2009-09-10 20:42:37

+0

@Chuck:在技术上你是正确的,但在现实生活中,它有时可以帮助你确定保留/释放问题。 – 2009-09-10 20:46:49

0

在调试器控制台,您可以键入:打印(unsigned int类型)的事情retainCount]

1

我想你可能会遇到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 

加里

相关问题