Принятая идиома для отображения медленно загружаемых (т. Е. Сетевых) данных в таблице состоит в том, чтобы показать индикатор активности в ячейке, если данные еще не представлены в таблице, а затем загрузить данные в фоновом режиме (NSOperationQueue и NSOperation отлично подходят для этого), и отправлять уведомление, когда данные будут готовы.Это почти наверняка ваша собственная задержка (сетевая задержка и время синтаксического анализа) при предоставлении данных в таблицу, а не задержка UITabvleView при обработке вашего вызова reloadData.
Редактирование: еще некоторая информация и решение этой задержки:
Код вызывает подпрограммы пользовательского интерфейса ("[таблица reloadData]") вне основного потока.Это плохо, не делайте этого.
Вы пытаетесь «вставить» информацию об изображении в таблицу в [self loadImages] вместо того, чтобы таблица «вытягивала» информацию в строкуза один раз в cellForRowAtIndexPath.
РЕДАКТИРОВАТЬ: ОК, положив деньги туда, где я говорю: я внес следующие изменения, и все задержки прошли (согласно временным меткам NSLog это около 2миллисекунды между executeSelectorOnMainThread и cellForRowAtIndexPath).
//[table reloadData];
NSLog( @"thread: calling reload" );
[table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
//[self loadImages];
Обратите внимание, что приложение все еще не в порядке, изображения еще не обновляются.Просто запомните: загрузите изображения в фоновом режиме и отправьте в класс контроллера представления уведомление о доступности новых изображений, затем вызовите [reload Table] (конечно, из обработчика уведомлений, запущенного в главном потоке!).Не вызывайте функции UIKit из какого-либо фонового потока.Этого должно быть достаточно для того, чтобы реструктурировать код, чтобы сделать правильные вещи.