-1

重複の可能性:
[obj release]後も参照カウントは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. 保持カウントメソッドは0を返すことはできません。これは、リリース後にオブジェクトが生きていることを意味しますか?
4

1 に答える 1

1

#2 では、ラベル ポインターを nil (0) に設定したため 0 が返されます。nil で関数を呼び出すと、nil、つまり 0 が返されます。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 に答える