0

我有以下代码,但它不起作用。背后有什么东西在起作用。

[operationQueue addOperationWithBlock:^{
        imageData =  [NSData dataWithContentsOfURL:imageURL];
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            UIImage *image = nil;

            if(imageData){
                UIImage *image = [UIImage imageWithData:imageData];
                cell.imageView.image = image;
            }
        }];
    }];

即使我创建了一个 NSOperation 的子类,然后对其进行分配初始化,它也无法按照我的想法工作。我总是必须调用 NSOperation 子类的启动才能运行,但我想向 NSOperation 发送启动消息会在主线程中运行它,而不是在后台线程中运行。

4

1 回答 1

1

我想使用 GCD 添加替代解决方案:

backgroundQueue = dispatch_queue_create("com.razeware.imagegrabber.bgqueue", NULL);
dispatch_async(backgroundQueue, ^{
                          /* put the codes which makes UI unresponsive like reading from network*/ 
                         imageData =  [NSData dataWithContentsOfURL:imageURL];
                         .....   ;
                         dispatch_async(dispatch_get_main_queue(),^{
                                         /* do the UI related work on main thread */
                                         UIImage *image = [UIImage imageWithData:imageData];
                                         cell.imageView.image = image;
                                         ......;   });
                                  });
dispatch_release(backgroundQueue);

让我知道这个是否对您有所帮助;)

参考

于 2012-10-30T18:58:49.320 回答