Медленно загружайте изображения из URL в UITAbleView.

Я загружаю изображения из URL в UITableView. Но при загрузке представления это очень медленно. Вот пример,

UIImage *image = nil;
image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"]]];

В режиме таблицы UIButton я устанавливаю фоновое изображение.

Можете ли вы предоставить образец.

FYI: Я использую программу LazzyTable, но это не очень полезно. Можете ли вы предложить любые другие образцы.

0
Я думаю, что загрузка изображения таким образом - синхронный вызов. Используйте sdwebimage как категорию uiimageview, надеюсь, это вам поможет.
добавлено автор Exploring, источник
Я поражен ответом. Спасибо за все ответы. Я проверю.
добавлено автор 2vision2, источник
используйте этот проект , он сделает асинхронную загрузку для вас
добавлено автор tkanzakic, источник

9 ответы

Загрузка изображения асинхронно

NSURL* url = [NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"];
    NSURLRequest* request = [NSURLRequest requestWithURL:url];


[NSURLConnection sendAsynchronousRequest:request
        queue:[NSOperationQueue mainQueue]
        completionHandler:^(NSURLResponse * response,
            NSData * data,
            NSError * error) {
    if (!error){
            NSImage* image = [[NSImage alloc] initWithData:data];
       //do whatever you want with image
    }

}];
17
добавлено
@Madman - Действительно очень классно отлично.
добавлено автор Grey Code, источник
Большое спасибо. Это работает для меня. И я бы принял это как ответ.
добавлено автор 2vision2, источник
хорошее решение +1
добавлено автор Paresh Navadiya, источник
sendAsynchronousRequest: queue: completionHandler: 'устарела: первая устарела в iOS 9.0 - Используйте [NSURLSession dataTaskWithRequest: completeHandler:] (см. NSURLSession.h)
добавлено автор freddieoh, источник

Для этого доступны некоторые библиотеки с открытым исходным кодом:

  1. HJCache
  2. SDWebImage

Эти библиотеки загружают изображение в асинхронном режиме и кэшируют его для дальнейшего использования.

3
добавлено
HJCache намного лучше, чем SDWebImage. легко интегрируется и легко понят с полной функциональностью.
добавлено автор Abdul Yasin, источник

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

Я думаю, что у вас есть свой загрузочный образ на filePath, и когда вы загрузите изображение, вы можете проверить, было ли загружено изображение раньше, если нет, а затем загрузить. если он был загружен, вы можете использовать метод imageWithContentsOfFile: для загрузки изображения

2
добавлено

// Использование очереди отправки для более быстрой обработки данных. добавить это в viewDidLoad

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
    [self performSelectorOnMainThread:@selector(setImage:) withObject:data waitUntilDone:YES];
});

// после того, как данные получены, установите изображение и перезагрузите табличное представление

-(void)setImage:(NSData *)responseData
{
image = [UIImage imageWithData:responseData];
[tableView reloadData];
}
2
добавлено

Попробуйте реализовать AFNetworking . Он использует асинхронные запросы для загрузки изображения, в настоящее время вы блокируете просмотр при каждой загрузке.

Затем вы можете использовать AFImageRequestOperation для загрузки изображения.

2
добавлено

Посмотрите на этот учебник. Это мне очень помогло. Когда я использовал его, я был совершенно новым для iOS в целом, и это было полезно не только для загрузки изображений из Интернета.

http://www.markj.net/iphone-asynchronous-table-image/

Вы должны использовать NSOperationQueue , чтобы сделать ваш tableview эффективным.

Check this icodeblog tutorial and raywenderlich tutorial

1
добавлено

возможно, вы можете использовать asihttprequest для ленивых изображений загрузки. использовать ASINetworkQueues

1
добавлено
Используйте AFNetworking вместо ASI, поскольку он больше не разрабатывается. (Даже автор рекомендует не использовать ASI больше.)
добавлено автор Ross, источник

С AFNetworking это проще.

// AFNetworking

#import "UIImageView+AFNetworking.h"

[cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];
0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.