Как загрузить локальные изображения в UITableView, не влияя на производительность прокрутки вниз?

Прежде чем кто-то скажет, что эта тема дублируется несколько раз, обратите внимание, что мне действительно не нужно загружать удаленные изображения из Интернета (решение SDWebImage github), я пытаюсь загрузить изображения, динамически сохраненные в папке документов, поэтому они локально к тому времени, когда я хочу загрузить их в свой tableView, имея ссылку на них через запись в таблице sqlite, в которой я сохранил имя изображения, как оно было сгенерировано кодом.

Поэтому после анализа всех моих данных sqlite в моем методе CellForRowAtIndexPath в определенный момент у меня есть следующие строки кода:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    NSString *imageName = [[favorites objectAtIndex:[indexPath row]] objectForKey:@"imagename"];
    cell.image.image = [self loadImage: imageName]; // Is a custom cell so cell.image is a UIImageView, and I'm setting its image property
    ...
}

И мой метод loadImage выглядит так:

- (UIImage*)loadImage:(NSString*)imageName {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]];

    return [UIImage imageWithContentsOfFile:fullPath];

}

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

Просто чтобы вы знали, я работаю с iOS 5 и ARC.

Любая помощь будет принята с благодарностью.

1 ответ

Сначала уменьшите размер загружаемого вами изображения.

Во-вторых, попробуйте использовать GCD для загрузки изображения в tableView:cellForRowAtIndexPath:.

Другие вопросы по тегам