загрузка изображений из фонового потока с использованием блоков - PullRequest
11 голосов
/ 21 сентября 2011

У меня есть следующий метод, который в основном вызывает запрос на загрузку массива NSData изображений в фоновом потоке:

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){

}];

В этом случае объекты являются массивом NSData. Проблема в том, что если у меня есть 100 изображений для загрузки (100 элементов в массиве). Это означает, что пользователю придется ждать некоторое время, чтобы увидеть любое изображение, отображаемое в UITableView. Я хочу, чтобы они увидели изображение, как только оно будет доступно / загружено. Должен ли я затем изменить код, чтобы он загружал изображение в 100 фоновых потоков?

Ответы [ 3 ]

49 голосов
/ 21 сентября 2011

вы можете реализовать что-то подобное в вашем cellForRowAtIndexPath:

Таким образом, вы загружаете каждое изображение в фоновом режиме, и как только оно загружается, соответствующая ячейка обновляется в mainThread.

1 голос
/ 21 сентября 2011

Нет, вам не нужно создавать столько фоновых потоков. Используйте NSOperationQueue.

0 голосов
/ 21 сентября 2011

Вы можете создать NSInvocationOperation и установить его на NSOperationQueue

например: Инициализация NSOperationQueue:

NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];

После создания NSInvocationOperation:

NSInvocationOperation* downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selectorToDownloadImage:) object:YouData];    
[operationQueue addOperation:downloadOperation];
[downloadOperation release]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...