1

すべてのセルに同じ識別子を与えると、消失セルは出現セルのメモリを使用します。テーブルビューをスクロールするとコンテンツが繰り返されることを意味します。しかし、diff Identifier を指定すると、すべてのセルに独自のメモリ ロケーションがあり、データが完全に表示されます。

ここで、Table-view に読み込むレコードが 1000 件以上あるとします。異なる識別子を指定すると、メモリに多くの割り当てが発生します。最小のメモリ割り当てでデータを完全に表示するソリューションはありますか?

セル識別子を定義する方法は次のとおりです。

-(UITableViewCell *)tableView:(UITableView *)tableView 
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row];
    UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (Cell == nil) 
    {
        Cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                      reuseIdentifier:cellIdentifier];
    }
}
4

2 に答える 2

2

発生している問題は、セル識別子の不適切な使用が原因です。セル識別子は、再利用するすべてのセルで同じである必要があります。このテンプレートを見てください。正しいアプローチが説明されているはずです。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdentifier = @"MY_CELL";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        // everything that is similar in all cells should be defined here
        // like background colors, label colors, indentation etc.
    }
    // everything that is row specific should go here
    // like label text, progress view progress etc.
    return cell;
}

ところで。キャメルケースを使用して変数に名前を付けます。大文字の名前はクラス名を意味します。

于 2012-05-04T10:17:45.293 に答える
1

ラベルを空にするなど、デキューされたセルの内容をクリアする必要があります。各セルに個別のメモリを割り当てると、簡単にメモリ不足になります。完璧なメモリ管理は依然としてセルを再利用しています。

于 2012-05-04T11:00:04.303 に答える