2012-10-09 133 views
-1

可能重复后保留计数:
Reference count is still 1 after [obj release], when it should be deallocated对象释放和零值

1.当我写此代码。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 30)]; 
[self.view addSubview:label]; 
label.text [email protected]"label Text"; 

[label release]; 
[label release]; 

NSLog(@"LableRetainCount = %i \n",lable.retainCount); 

输出:LableRetainCount 1.Lable保留计数从1减少为什么?

2.当我写这段代码。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 100, 30)]; 
    [self.view addSubview:lable]; 
    label.text [email protected]"lable Text"; 

    label = nil; 
    NSLog(@"LabelRetainCount = %i \n",label.retainCount); 

输出:LabelRetainCount = 0当我设置“label = nil”它的保留计数变为0为什么? 这是meane内存释放此对象吗?

  1. 对象是否被释放?
  2. 现在我们不需要释放它吗?
  3. retainCount方法永远不会返回0.这意味着对象在发布之后是否还活着?
+3

[何时使用保留计数](http://whentouseretaincount.com/) – DrummerB

+1

某些原因:http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/ – DrummerB

回答

1

在#2它返回0因为你设置你的标签指针为零,这是0,当你调用一个函数在零它返回零,即0.所以它不真正返回一个retainCount它只是返回零。你必须明白,你将标签设置为零,它不再指向你的UILabel ...

如果你想正确地释放它,像所有的方式0,首先你会这样做后您的.text行:

​​3210

然后您的保留计数应该为0,对象将被释放。

+4

'retainCount'永远不会返回0. –

+0

但retainCount永远不会变成0为什么?当你释放它,但是当你释放它时,它的保留计数变为零。释放减少保留计数但从不为零设置为什么? –

+0

对象保留计数1它表示对象存活。 –