1

でいくつか作成UILabelsし、UIViewそれらにデータを入力し、ビューに追加して、リリースしています。

 UILabel *speed = [self scrollLabel:@"some Text" x:455.0f y:75.0f];
 [scrollView addSubview:speed];
 [speed release];

メソッド:

- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_ {

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x_, y_, 300.0f, 20.0f)];
 [label setText:NSLocalizedString(text,@"")];
 [label setFont:[UIFont fontWithName:@"Helvetica" size:14]];
 [label setTextColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.9]];
 [label setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]];

 return label;

}

ユーザーが uilabels のデータをリロードできるボタンを取得しました。これらすべてのラベルの親ビューをスーパービューから削除し、新しいデータを生成して、ラベルが設定されているメソッドを再度実行しています。

問題は、古い UILabels がまだ存在していることです。私の質問は、この特別なラベルを削除する最良の方法は何ですか?

ループを作成し、すべてのサブビューを削除しました。問題は、削除したくない他のサブビューもそこにあることです。

別の質問: 複数のラベルのフォント スタイルをセットアップするより良い方法はありますか?

4

1 に答える 1

1

特定の UIView にすべてのラベルを追加することをお勧めします。それを labelHolderView と呼びましょう。次に、それらを削除するたびに、すべての子を繰り返し処理し、removeFromSuperviewそれぞれを呼び出します。

特定の UILabels のみを削除したい場合は、どの UILabels を削除すべきかについての詳細情報を提供してください。

上記のコードについて私が提案することの 1 つは、- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_メソッドが自動解放された UILabel を返す必要があることです。したがって、その最後の行はreturn [label autorelease];. 保持されたオブジェクトを返したい場合は、メソッドの名前に new/copy/retain を追加して、呼び出されるたびに返されたオブジェクトが保持されていることを確認します。

したがって、UIView に追加した後にラベルを解放する必要はありません。これはあなたの特定のプログラムには影響しませんが、将来保持/リリースを台無しにしないように、この方法を習慣づけることは良いことです.

于 2010-01-28T23:42:17.633 に答える