2

セルが初めて表示されると、initメソッドが使用されます。セルが初めて表示されなくなると、テーブルビューのメモリからデキューされます。

UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:identifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
}
return cell;

テーブル全体をスクロールしたとしましょう。すべてのセルがすでに初期化されているため、どのセルもデキューできます。

現在のセルの識別子は0から199です。テーブルビューを更新すると、セルの新しい情報が表示されます。私はメソッドを使用し、セル識別子reloadDataに追加することにより、新しいセルに200から399までの識別子を使用します。+200

NSInteger index = indexPath.row + 200;
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",index];

ここで、テーブル全体をスクロールして、200から399までのセルを確認します。

私が元に戻ったと想像してみましょindexう:

NSInteger index = indexPath.row;

ここで質問です。識別子が0から199の古いセルは、引き続きデキューできますね。

答えがThey CAN be dequeued「私は別の質問がある場合:

識別子が200から399のセルを使い始めたときに、識別子が0から199のセルをテーブルビューメモリから削除する方法はありますか?

4

1 に答える 1

3

UITableView dequeueReusableCellWithIdentifierメソッドはあなたのためにそれを処理します。使用している場合は、表示されているセルのみがデキューされ、200個のセルすべてがデキューされるわけではありません。static [iTableView dequeueReusableCellWithIdentifier:cellIdentifier];

これはアップルのディスカッションスレッドからのディスカッションです。それも確認してください。

更新: セル識別子を変更する必要があります。行ごとに新しいCellIdentifierを作成する場合dequeueReusableCellWithIdentifier、識別子は毎回異なるため、使用しても意味がありません。

それ以外の

NSString *CellIdentifier = [NSString stringWithFormat:@"%d",index];

そのはず、

static NSString *CellIdentifier = [NSString stringWithString@"cell"];

つまり、同じセルが表示されなくなると、すべてのセルが再利用されます。表示されていないセルを選択し、表示される次のセルのセットに再利用します。実装に従って、300または400のセルが作成され、同じセルへの参照がなくなったため、以前のセルを削除することについて多くのことを行うことはできません。

あなたの方法は次のようになります、

static NSString *CellIdentifier = [NSString stringWithString@"cell"];
UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:Cellidentifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
}
cell.textLabel.text = @"something";
//...
return cell;

Update2: ARCを使用していない場合は、次のようにする必要があります。

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier] autorelease]; 

あなたautoreleaseは同じために持っている必要があります。

于 2012-10-13T05:22:13.870 に答える