Calling это часто (каждый второй), через 5 минут UI застываетЧасто перегрузочный UITableView каждый второй замерзает UI
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
Calling это часто (каждый второй), через 5 минут UI застываетЧасто перегрузочный UITableView каждый второй замерзает UI
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
reloadData
не работает асинхронно. Это означает, что, пока вы правильно выполняете его в основном потоке (все обновления пользовательского интерфейса должны произойти в основном потоке), основной поток будет зависать до тех пор, пока представление не будет перезагружено. Вы вызываете это так часто, что в какой-то момент запросы перезагрузки начинают стекаться поверх eachother, потому что он был вызван снова, прежде чем он завершится. Это когда основной поток блокируется, и ваш пользовательский интерфейс замерзает.
Вы можете заставить нить ждать перезагрузки перед выполнением другой с
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
, но я хотел бы предостеречь вас в этом. Вместо этого пересмотреть, почему вы в первую очередь перезагружаете таблицу.
Спасибо за объяснение и ответ. Но я получаю данные через bluetooth, которые я должен показать в tableview. Скорость передачи данных настолько высока, поэтому мне приходится добавлять 200 объектов в таблицу в секунду. –
Будет. Зачем загружать все данные таблицы. Если вы хотите обновить видимые ячейки, то обновите эти ячейки или измените свою логику, с помощью которой вы сможете справиться с освежением в соответствии с вашими потребностями. – Wolverine
Зачем вам выполнять этот код периодически? Вы должны знать, когда доступны новые данные, и только выполнить перезагрузку, чем. – vikingosegundo
Лучшим вариантом будет регистрация центра UITableView в Notification Center для получения обновленного уведомления о записи, а затем вы можете соответствующим образом перезагрузить UITableView. – viral