2017-02-06 9 views
0

Calling это часто (каждый второй), через 5 минут UI застываетЧасто перегрузочный UITableView каждый второй замерзает UI

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView reloadData]; 
}); 
+2

Будет. Зачем загружать все данные таблицы. Если вы хотите обновить видимые ячейки, то обновите эти ячейки или измените свою логику, с помощью которой вы сможете справиться с освежением в соответствии с вашими потребностями. – Wolverine

+2

Зачем вам выполнять этот код периодически? Вы должны знать, когда доступны новые данные, и только выполнить перезагрузку, чем. – vikingosegundo

+0

Лучшим вариантом будет регистрация центра UITableView в Notification Center для получения обновленного уведомления о записи, а затем вы можете соответствующим образом перезагрузить UITableView. – viral

ответ

0

reloadData не работает асинхронно. Это означает, что, пока вы правильно выполняете его в основном потоке (все обновления пользовательского интерфейса должны произойти в основном потоке), основной поток будет зависать до тех пор, пока представление не будет перезагружено. Вы вызываете это так часто, что в какой-то момент запросы перезагрузки начинают стекаться поверх eachother, потому что он был вызван снова, прежде чем он завершится. Это когда основной поток блокируется, и ваш пользовательский интерфейс замерзает.

Вы можете заставить нить ждать перезагрузки перед выполнением другой с

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES]; 

, но я хотел бы предостеречь вас в этом. Вместо этого пересмотреть, почему вы в первую очередь перезагружаете таблицу.

+0

Спасибо за объяснение и ответ. Но я получаю данные через bluetooth, которые я должен показать в tableview. Скорость передачи данных настолько высока, поэтому мне приходится добавлять 200 объектов в таблицу в секунду. –

 Смежные вопросы

  • Нет связанных вопросов^_^