私はGCDとブロックが初めてで、それに慣れています。
背景: ALAssetsLibrary を使用して、UIScrollView の遅延読み込みルーチンに取り組んでいます。UIScrollView が読み込まれるとaspectRatioThumbnails、ALAsset が読み込まれ、ユーザーがスクロールすると、以下のルーチンを呼び出して、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;
                }
            });
        }
    });
}