Используя блок или NSOperation для загрузки изображения? - PullRequest
2 голосов
/ 11 мая 2011

Мне нужно знать, лучше ли использовать NSOperation или Block для загрузки большого количества изображений в UIScrollView? Я создаю весь ImageView и размещаю каждый UIImageView в правильном положении в свитке.

Чтобы избежать предупреждения о памяти, я выбираю загружать изображение один раз за раз. Моя идея заключается в создании своего рода очереди и вставке всего изображения для загрузки в очередь. Я должен использовать блок или NSOperation, чтобы сделать это?

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

В tableView:cellForRowAtIndexPath: вы можете использовать GCD (Grand Central Dispatch) для асинхронной загрузки изображений.

Как это:

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;

Редактировать: Для лучшего ответа смотрите WWDC '12 Session 211 - «Создание параллельных пользовательских интерфейсов на iOS» (спасибо @ sc0rp10n!)

2 голосов
/ 11 мая 2011

Если вам нужна очередь, тогда разумно использовать NSOperationQueue (и, следовательно, NSOperations):)

...