2012-03-13 6 views
3

私はUIButtonを押したときにviewWithTagを呼び出すことによってラベルを再利用しようとしています。最初に実行されたときにコードは正常に見えますが、7行目のためにコードが複数回実行されて漏れていますか?また、viewWithTagを使用する代わりに、superview、alloc、およびaddSubviewからラベルを削除する方が良いでしょうか?viewWithTagとaddSubview

1. UILabel *label = (UILabel *)[self.view viewWithTag:100]; 
2. if(label == nil) { 
3. label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease]; 
4. label.tag = 100; 
5. } 
6. 
7. [self.view addSubview:label]; 

答えて

5

コード[self.view addSubview:label];ifブロック内に移動してください。 if条件がfalseの場合、ラベルはすでにビューコントローラのビュー階層の一部であることを意味します。元のコードのように再度追加すると、ラベルは2重に保持されます。

UILabel *label = (UILabel *)[self.view viewWithTag:100]; 
if (!label) { 
    label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease]; 
    label.tag = 100; 
    [self.view addSubview:label]; 
} 
+0

私はそれを試してみるつもりです。このようなメモリリークをどのように捕捉できますか? – apy

+0

機器を使用して潜在的な漏れを見つけます。ここにチュートリアルがあります:http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial – jonkroll

+0

何らかの理由で、楽器は私の以前のコードが漏れ。 – apy

0

.xibまたはストーリーボードを使用している場合は、IBOutletとリンクするだけです。

コードのみを使用している場合は、プライベート変数として保存してください。

+0

私は私のビューをプログラムで作成するので、管理するために多くのivarsが必要になります。 – apy

関連する問題