Проблема производительности UITableView - PullRequest
1 голос
/ 08 октября 2010

У меня есть UITableView, который получает данные с сервера и обновляет их каждую 1 секунду (используя executeSelectorOnMainThread) Так как это блокирует основной поток, иногда не легко прокрутить таблицу и это неудобно для пользователя. Также я не могу уменьшить интервал обновления.

Каковы возможные решения этой проблемы?

Ответы [ 4 ]

1 голос
/ 08 октября 2010

Я бы обновлял только видимые ячейки при изменении данных, а остальные по мере их появления, так что это будет менее затратным, чем обновление отверстия. UITablaView

, вы можете получить видимые ячейки, используя (из UITableView):

- (NSArray *)visibleCells

и вы можете обновлять оставшиеся ячейки по мере их появления, используя протокол UITableViewDelegate

– tableView:willDisplayCell:forRowAtIndexPath:

, и я думаю, что это должно сделать его немного быстрее.

0 голосов
/ 29 июля 2012

Использовать GCD с очередями (последовательными или глобальными очередями).Это путь, рекомендуемый яблоком сейчас.

dispatch_async(dispatch_get_main_queue(), ^{


//do UI updates

});
0 голосов
/ 09 октября 2010

вместо вызова функции executeSelectorOnMainThread вызова NSThread

detachNewThreadSelector.Таким образом, ваш поток не будет блокировать основной поток

[NSThread detachNewThreadSelector: @selector (aMethod :) toTarget: [класс MyObject] withObject: nil];

в методе toTarget: вы можетенапишите self вместо [MyObject class]

также в селекторе реализации напишите @synchronize (self), например, для

- (void) aMethod {@synchronize (self) {

     //write your whole code here 
  }

}

Я сделал то же самое в своем приложении, его работа отлично

0 голосов
/ 08 октября 2010

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

Возможно, вы просто вызовете NSUrlConnection из NSTimer с любым интервалом, который вы предпочитаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...