Каков наилучший способ обеспечить перезагрузку UITableView атомарно?

v получил UITableView, источник данных которого обновлялся через случайные интервалы за очень короткий период времени. По мере обнаружения новых объектов они добавляются в tableView 's источник данных, и я вставляю конкретный indexPath:

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];

Источник данных находится в классе менеджера, и при его изменении публикуется уведомление.

- (void)addObjectToDataSource:(NSObject*)object {
    [self.dataSource addObject:object];
    [[NSNotificationCenter defaultCenter] postNotification:@"dataSourceUpdate" object:nil];
}

ViewController обновляет tableView, когда получает это уведомление.

- (void)handleDataSourceUpdate:(NSNotification*)notification {
    NSObject *object = notification.userInfo[@"object"];
    NSIndexPath *indexPath = [self indexPathForObject:object];

    [self.tableView beginUpdates];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tableView endUpdates];
}

Это работает нормально, но я заметил, что в некоторых случаях второй объект обнаруживается так же, как первый вызывает endUpdates, и я получаю исключение, утверждающее, что у меня есть два объекта в моем источнике данных, когда tableView ожидал одного.

Мне было интересно, если кто-нибудь нашел лучший способатомарно вставьте строки в tableView. Я думал поставить@synchronized (self.tableView) блок вокруг обновления, но яЯ хотел бы избежать этого, если это возможно, потому что это дорого.

Ответы на вопрос(1)

Ваш ответ на вопрос