reloadData в tableView замедляет производительность - PullRequest
0 голосов
/ 13 января 2012

Я работаю над представлением таблицы и столкнулся с проблемой, заключающейся в том, что моя таблица замедляется для отображения данных.Я кодировал

-(void) loadView {
     getDataForTableView();
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return items.count;
}
-(void) getDataForTableView {
    // This method will do some stuff and will return the count of items
    [self.tableView reloadData]
}

Моя таблица может перезагрузиться, а затем отобразить содержимое элементов в табличном представлении.Тем не менее, это займет некоторое время, чтобы сделать это.Как мы можем ускорить процесс, чтобы представление таблицы отображало данные быстрее?

ОБНОВЛЕНИЕ:

Что я сделал, это:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"shoppingListCell";
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    MyCustomCell.totalLabel.text = numberAsString;
    MyCustomCell.comment.text = currentItem.comment;
    return MyCustomCell;
} 

1 Ответ

0 голосов
/ 13 января 2012

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

Я бы сделал запрос на другомнить или используя NSInvocationOperation, и пусть он отправит уведомление / обратный вызов при возврате запроса.Просто убедитесь, что обработчик уведомлений выполняет все / все разговоры с объектами UIKit с помощью executeSelectorOnMainThread.Apple диктует, что весь код UIKit должен выполняться в главном потоке, и, хотя отправка сообщений объектам UIKit в других потоках не обязательно приведет к сбою вашего приложения или вызову предупреждения компилятора, это приведет к очень непредсказуемому поведению (а также, возможно, сбоям).

С точки зрения пользовательского интерфейса, если вы должны выполнять запрос только в тот момент, когда отображается представление таблицы (по какой-то уважительной причине), убедитесь, что отображается индикатор активности "загрузка"(См. UIActivityIndicatorView) или что-то подобное.

В идеале, однако, вы должны загрузить данные и кэшировать их в фоновом режиме, прежде чем таблица будет показана.И периодически проверяйте его на предмет устаревания и получайте более свежие данные с сервера при необходимости.Подумайте, как foursquare или Path делают это с данными места в своих приложениях.

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