开发者

loading images from a background thread using blocks

开发者 https://www.devze.com 2023-04-06 05:52 出处:网络
I have the following method, which basically calls a request to load an array of NSData of images in the background thread:

I have the following method, which basically calls a request to load an array of NSData of images in the background thread:

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){

}];

In this case objects is an array of the NSData. The issue is that if I have 100 images to load (100 elements in the array). This means that the user will have to wait for quite some time to see any image showing up in a UITableView. What I want to do is for th开发者_如何学Pythonem to see an image once it is available/loaded.. do I have to then change the code so that it does 100 background threads to load the image?


you could implement something like this in your cellForRowAtIndexPath:

That way you load each image in the background and as soon as its loaded the corresponding cell is updated on the mainThread.

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) {
        NSData *data0 = [NSData dataWithContentsOfURL:someURL];
        UIImage *image = [UIImage imageWithData:data0];

        dispatch_sync(dispatch_get_main_queue(), ^(void) {
            UIImageView* imageView = (UIImageView*)[cell viewWithTag:100];
            imageView.image = image;
        });
    });


You can create NSInvocationOperation and set it to NSOperationQueue

for example: Initializing NSOperationQueue:

NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];

After create NSInvocationOperation:

NSInvocationOperation* downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selectorToDownloadImage:) object:YouData];    
[operationQueue addOperation:downloadOperation];
[downloadOperation release]; 


No, you don't have to create that many background threads. Use NSOperationQueue.

0

精彩评论

暂无评论...
验证码 换一张
取 消