0

だから私は次のコードを持っています:

static NSString *CellIdentifier = @"RecommendationCell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TableViewCell"] autorelease];
    }

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [indicator setCenter:CGPointMake(0, 15)];
    [indicator startAnimating];
    [indicator hidesWhenStopped];

    UILabel *someLabel......... 


    UIView *containerView = [[UIView alloc] initWithFrame:CGRectZero];
    [containerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [containerView setAutoresizesSubviews:YES];
    [containerView setBackgroundColor:[UIColor clearColor]];
    [containerView addSubview:indicator];
    [containerView addSubview:someLabel];
    [containerView setFrameSize:CGSizeMake(indicator.frameWidth+self.loadingGeniusLabel_.frameWidth, 30)];
    [containerView setCenter:CGPointMake(cell.contentView.center.x, 15)];

    [cell.contentView addSubview:containerView];

    [indicator release];
    [containerView release];

    return cell;

私の質問は、上記のコードは効率的/クリーンですか? 私が尋ねる理由は、取得したセルが再利用可能なデッキからのものである場合、UIActivityIndi​​cator と必要なビューが含まれているからです。新しいセルを割り当てる場合 (つまり、セル == nil の場合) にのみサブビューを追加する必要がありますか?

4

1 に答える 1

1

上記のコードは効率的/クリーンですか?

いいえ

取得したセルが再利用可能なデッキからのものである場合、UIActivityIndi​​cator と必要なビューが正しく含まれています。

はい。ただし、汎用の UITableViewCell を使用しているため、一度追加すると UIActivityIndi​​cator にアクセスできなくなります。これを効率的に行うには、UITableViewCell のサブクラスを作成する必要があります。

新しいセルを割り当てる場合 (つまり、セル == nil の場合) にのみサブビューを追加する必要がありますか?

はい

絶対に必要な場合にのみ、if (cell == nil) ブロックの外で addSubview を呼び出します。これは高価なメソッド呼び出しであり、テーブルをスクロールするときに 1 秒あたりのフレーム数に深刻な影響を与えます。

あなたの最善の策は、UITableViewCell をサブクラス化することです。このように、セルごとに異なる値/動作を制御する必要があるオブジェクト/UIView (または UIView サブクラス) は、UITableViewCell サブクラスのプロパティとして適しています。これを行うことで、xib ファイルまたはセル設定 (その if ステートメント内) でそれらをインスタンス化し、(毎回新しいオブジェクトを作成するのではなく) 各セルの値を変更するだけです。

Apple のテーブル ビュー プログラミング ガイドでは、これについて詳しく説明してい ます。

Apple のサンプル プロジェクトは、テーブル セルを効率的に管理するためのいくつかの異なる方法を示してい ます。

于 2012-04-23T22:03:53.410 に答える