0

reloadDataUITableViewに関するドキュメントには、( http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html ): 「挿入または削除するメソッドで呼び出すべきではありません。 rows、特に beginUpdates と endUpdates の呼び出しで実装されたアニメーション ブロック内で".

私の質問は、なぜですか?(特に最初の部分、斜体)。

このように UITableView に項目を追加することを実装している私が読んでいる本があります:

// Add new item to the table
- (IBAction)addNewItem:(id)sender
{
    // Update the model, add a new item
    BNRItem *newItem = [[BNRItemStore sharedStore] createItem];

    // Figure out where that item is in the array
    int lastRow = [[[BNRItemStore sharedStore] allItems] indexOfObject:newItem];

    // Create the corresponding index path
    NSIndexPath *ip = [NSIndexPath indexPathForRow:lastRow inSection:0];

    // Insert this new row into the table
    [[self tableView] insertRowsAtIndexPaths:[NSArray arrayWithObject:ip]
                            withRowAnimation:UITableViewRowAnimationTop];
}

一方、同じことは次のようにも達成できます:

// Add new item to the table
- (IBAction)addNewItem:(id)sender
{
    // Update the model, add a new item
    [[BNRItemStore sharedStore] createItem];

    [[self tableView] reloadData];
}
4

1 に答える 1

1

データをリロードすると、すべての行が強制的に再作成されるため、新しい情報がある場合は、追加/削除する必要があるものをテーブルビューに伝える方がはるかにパフォーマンスが高くなります。特に、たとえば、 end であり、その部分は現在画面に表示されていません (したがって、ビューを再レンダリングする必要はなく、スクロールの高さだけを再計算する必要があります)。

于 2013-07-31T09:17:22.950 に答える