-1

可能重复:
引用计数在 [obj 释放] 之后仍为 1,此时应将其释放

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 为什么?这意味着该对象的内存释放了吗?

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

1 回答 1

1

在#2中它返回0,因为您将标签指针设置为nil,即0,当您在nil上调用函数时,它返回nil,即0。所以它并没有真正返回retainCount,它只是返回nil。将 label 设置为 nil 后,您必须了解它不再指向您的 UILabel ...

在 #1 上,如果您想正确释放它,就像一直到 0 一样,首先您将在 .text 行之后执行此操作:

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

然后你的保留计数应该是 0 并且对象将被释放。

于 2012-10-09T17:35:00.993 回答