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;
                }
            });
        }
    });
}

Ответы на вопрос(4)

Ваш ответ на вопрос