Как избежать замедления при прокрутке табличного представления? - PullRequest
4 голосов
/ 15 июля 2011

У меня есть настраиваемая ячейка табличного представления с изображениями (загруженными из каталога документов приложения), метками, тенями и т. Д., И когда я прокручиваю табличное представление, это вызывает много задержек. Как я могу избежать этих лагов? Я думаю, что можно кэшировать ячейку табличного представления или получить изображение ячейки табличного представления, но я не знаю, как это реализовать. Пожалуйста, помогите мне:)

В cellForRowAtIndexPath: я установил данные в блоке if (cell == nil), но замедления все еще есть.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        // ...configuring is here...
    }

    return cell;
}

P.S. Изображения в ячейке имеют высокое разрешение, но уменьшены для соответствия ...

Ответы [ 3 ]

8 голосов
/ 15 июля 2011

Вы должны загрузить свои изображения в фоновом потоке.Если вы используете iOS 4+, вы можете использовать GCD (Grand Central Dispatch) для их асинхронной загрузки.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    static NSString *CellIdentifier = @"ImageCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:CellIdentifier] autorelease];
    }
    NSString *imagepath = //get path to image here
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(queue, ^{
        UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
        dispatch_sync(dispatch_get_main_queue(), ^{
            [[cell imageView] setImage:image];
            [cell setNeedsLayout];
        });
    });
    return cell;
}
3 голосов
/ 15 июля 2011

Проверьте это: http://www.markj.net/iphone-asynchronous-table-image/

Это может помочь.

2 голосов
/ 15 июля 2011

Я думаю, что вы загружаете изображения с URL, поэтому вы сталкиваетесь с задержкой при прокрутке. Вы должны использовать Lazy Table images.эксп.в комментариях

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

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

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