1

基本的に画像データの配列を配列にロードする次のメソッドがあります。

-(void)loadImages:(NSMutableArray*)imagesURLS{
    //_indexOfLastImageLoaded = 0;
    [_loadedImages removeAllObjects];
    _loadedImages = [[NSMutableArray alloc]init];;
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        for (int i=0; i<imagesURLS.count;i++){
            NSLog(@"loading image for main image holder at index %i",i);
            NSData *imgData = [NSData dataWithContentsOfURL:[imagesURLS objectAtIndex:i]];
            UIImage *img = [UIImage imageWithData:imgData];
            [_loadedImages addObject:img];
            //_indexOfLastImageLoaded++;
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"_loadedImages download COMPLETE");                      
        });
    });

}

たとえば、これらの画像が読み込まれているView Controllerからユーザーが離れたときに停止できるようにしたいのですが、これを行う最良の方法は何ですか?

ありがとう!

4

2 に答える 2

2

キャンセル要求をより柔軟にしたい場合は、すべての要求を連続してプッシュするのではなく、NSOperationQueue を使用することをお勧めします。

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue setMaxConcurrentOperationCount:1];
    for (int i=0; i<allImagesCount; i++) {
        [queue addOperationWithBlock:^{
            // load image
        }];
    }

    // for canceling operations
    [queue cancelAllOperations];

現在のコードでは、静的フィールドを定義して for ループにチェックインすることもできますが、最良の方法は SDWebImage を使用することです - https://github.com/rs/SDWebImage画像を非同期にロードします。

于 2013-08-14T23:12:45.643 に答える