在对象释放后保留计数和零值

时间:2012-10-09 17:28:54

标签: objective-c

  

可能重复:
  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 =@"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 =@"lable Text";

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

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

  1. 是否发布了对象?
  2. 现在我们不需要发布它吗?
  3. retainCount方法永远不能返回0.释放后意味着对象是否存活?

1 个答案:

答案 0 :(得分:1)

<#>在#2中它返回0,因为你将标签指针设置为nil,即0,当你在nil上调用一个函数时,它返回nil,即0.所以它不会真正返回一个retainCount,只返回nil。将标签设置为nil之后,您必须了解它不再指向您的UILabel ......

如果你想正确地释放它,就像#1一样,首先你要在你的.text行之后这样做:

[label removeFromSuperview]; // remove the view that you added, view will release it
[label release];

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

相关问题