2012-02-14 207 views
0

据我所知,如果一个对象的保留计数变为0,它的dealloc被调用。但我得到的保留计数为-1。这是什么意思?为什么retainCount返回-1

我使用下面的代码 -

Demo *obj1 = [[Demo alloc] init]; 
    NSString *s = [[NSString alloc] initWithString:@"mithilesh"]; 
    NSString *s1 = [NSString stringWithString:s]; 
    [s release]; 
    object_setInstanceVariable(obj1, [propertyName cString], s1); 
    //printing retain count 
    NSLog(@"retain count of name = %i",[obj1.name retainCount]); 

输出:

retain count of name = -1 

String通过对方法stringWithString返回:时,你得到释放?

+2

你在试图做什么..:/ – 2012-02-14 07:44:16

+1

可能的重复[为什么NSNumber错误计数retaincount?](http://stackoverflow.com/questions/8340050/why-does-nsnumber-wrong -count-A-retaincount) – 2012-02-14 19:36:38

回答

11

这意味着您需要停止拨打-retainCount。这纯粹是一种调试功能,除非你是一位Apple系统工程师或编译器工程师,否则你可能没有任何业务去查看该功能。

也就是说,你在这里看到的是INT_MAX被解释为一个有符号的数字。这听起来像你有一个恒定的字符串,可能@"mithilesh"。恒定字符串是不参与-retain-release的单身人士,并且INT_MAX-retainCount表示这一点。但这只是猜测,你应该停止看-retainCount

如果你不相信我,也许你会相信Bill Bumgarner,他说retainCount is useless