GCD - основной и фоновый поток для обновления UIImageView
Я новичок в GCD и блоках и облегчаю свой путь в него.
Фон: яя работаю над ленивой подпрограммой загрузки для UIScrollView, используя ALAssetsLibrary. Когда мой UIScrollView загружается, я заполняю егоaspectRatioThumbnails
моего ALAssets и затем, когда пользователь прокручивает, я вызываю процедуру ниже, чтобы загрузитьfullScreenImage
ALAsset, который в настоящее время отображается. Вроде работает.
(если у кого-то есть более ленивая процедура загрузки, пожалуйста, оставьте комментарий.Я посмотрел на все, что я мог найти, плюс видео WWDC, но они, кажется, имеют дело больше с плиткой или имеют гораздо больше сложности, чем мне нужно)
Мой вопрос: Я использую фоновый поток для обработки загрузкиfullScreenImage
и когда это сделано, я использую основной поток, чтобы применить его к UIImageView.Нужно ли использовать основной поток? Я'Я видел, что все обновления UIKit должны происходить в основном потоке, но я не уверен, относится ли это к UIImageView. Я думал, что это так, поскольку это элемент экрана, но потом я понял, что просто нея знаю
- (void)loadFullSizeImageByIndex:(int)index
{
int arrayIndex = index;
int tagNumber = index+1;
ALAsset *asset = [self.assetsArray objectAtIndex:arrayIndex];
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *tmpImage = [[UIImage alloc] initWithCGImage:asset.defaultRepresentation.fullScreenImage];
if ([weakSelf.scrollView viewWithTag:tagNumber] != nil){
dispatch_async(dispatch_get_main_queue(), ^{
if ([weakSelf.scrollView viewWithTag:tagNumber]!= nil){
UIImageView * tmpImageView = (UIImageView*)[weakSelf.scrollView viewWithTag:tagNumber];
tmpImageView.image = tmpImage;
}
});
}
});
}