2010-12-31 6 views
0

サブクラスがUITableViewで、同じプロパティ(font、textColor、backgroundColorなど)を共有する数のラベルを生成したいと考えています。ヘルパーメソッドを使用してUIButtonを作成する

UILabel *someLabel = [self defaultLabelWithFrame:CGRectMake(0,0,100,100)]; 
[self addSubview:someLabel]; 
[someLabel release]; 

- (UILabel *)defaultLabelWithFrame:(CGRect)frame { 
    UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
    label.font = [UIFont fontWithName:@"Helvetica" size:14]; 
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0]; 
    label.backgroundColor = [UIColor clearColor]; 

    return label; 
} 

は、私はこのようなメソッドを使用します。

は私が設定し、いくつかの一般的な特性を持つラベルを作成するヘルパーメソッドを作成することですこれを達成する最も簡単な方法を決定しました私の心配はここにある メソッドにラベルを作成するときに保持されますが、それをsomeLabelに割り当てると、再び保持され、メソッドで作成されたときにメモリを解放する方法がありません。

ここで最善のアプローチは何ですか?

  1. は、デフォルトのラベルタイプのUILabelのサブクラスを作成します。私は2つのオプションがありますよう

    I料。

  2. NSMutableArrayの作成はdefaultLabelsと呼ばれ、この中でラベルを格納します。
- (UILabel *)defaultLabelWithFrame:(CGRect)frame { 
    UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
    label.font = [UIFont fontWithName:@"Helvetica" size:14]; 
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0]; 
    label.backgroundColor = [UIColor clearColor]; 

    [defaultLabels addObject:label]; 
    [labels release]; //I can release here 
    return [defaultLabels lastObject]; //I can release defaultLabels when done 
} 

私はあなたの考えに感謝します。乾杯。

答えて

4

あなたはちょうどあなたがそれを返す前に、あなたのオブジェクトを自動解放する必要があります。addSubview:を含め、必要に応じてココア

- (UILabel *)defaultLabelWithFrame:(CGRect)frame 
{ 
    … 
    return [label autorelease]; 
} 

ほとんどのメソッドは、オブジェクトを保持します。オブジェクトがラベルを使用していない(つまり保持していない)場合は、ラベルが漏れてしまう心配は必要ありません。すでに自動解放プールに追加されており、自動的に解放されます。

+0

ラベルを使用するという点で、UILabel * label = [self defaultLabelWithFrame:CGRectZero]; ... [ラベルのリリース];ラベルを公開することを心配する必要はありませんか? – dianovich

+1

右。ラベルを手動で解放する必要はありません。それを保持しているビューはそれを解放します。実際には、単に[self addSubview:[self defaultLabelWithFrame:...]] 'を使うことができます。 –

+0

ありがとうございます。私はself.label = [self default ...]を使用し、self.label = nilをdeallocに設定しているケースが1つあります。私が必要とする限り、この方法でラベルを保持することができます。それは問題を起こさないでしょうか? – dianovich

関連する問題