1

この時点で私は本当にイライラしています。識別子を使用して再利用可能なセルをデキューすると、常にnullが返されます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        NSLog(@"INIT");
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    return cell;
}

私はここで何が間違っているのですか?ありがとう。

4

2 に答える 2

5

あなたはすべてを正しくやっています、すべてが正常に機能しています。iOSは、画面全体(および1つ)に十分な数の新しいセルを作成します。UITableViewこれらのセルの再利用は、1つの画面に収まるよりも多くの行が含まれている場合にのみ開始され、ユーザーはスクロールします。

データソースに100個のアイテムが含まれていると表示されてからスクロールすると、iOSのように100個ではなく、おそらく11回(画面に収まるセルの数によって異なります)ログメッセージが表示されるだけであることがわかります。スクロールしながらセルのリサイクルを開始します。

リストが大きいと、メモリを大量に使用して、のすべての可能な行に新しいビューを作成しますUITableView。別の方法は、スクロールするときに行に新しいビューを割り当てることです。ただし、これによりパフォーマンスのボトルネックが発生し、どの場合でもスクロールが遅くなりますUITableView

Appleは、sに関するドキュメントでUITableViewパフォーマンスのボトルネックについて言及しています。

セルを再利用します。-オブジェクトの割り当てにはパフォーマンスコストがかかります。特に、ユーザーがテーブルビューをスクロールする場合など、割り当てを短期間で繰り返し行う必要がある場合はそうです。新しいセルを割り当てる代わりにセルを再利用すると、テーブルビューのパフォーマンスが大幅に向上します。
于 2013-01-27T05:24:01.547 に答える
0

セルの再利用識別子を設定しましたか?でセルを初期化する-initWithStyle:reuseIdentifier:か、IBで識別子を設定します。

于 2013-01-27T03:52:14.613 に答える