0

现在,我正在一个方法中分派一段代码,以使用以下格式为我下载东西:

dispatch_queue_t downloader("downloader", NULL);
dispatch_async (downloader, ^{

//do stuff

});

我现在要做的是让该块为我返回一个 UIImage,然后我可以将其用作该方法的返回:

-(UIImage *) myMethod:

dispatch_queue_t downloader("downloader", NULL);
dispatch_async (downloader, ^{

//do stuff to get UIImage

     dispatch_async (dispatch_get_main_queue, ^{

     return UIImage;  //this is the image that image I want myMethod to return

     });    
});

我如何将参数传递给不兼容的类型错误。我意识到这是因为我没有声明该块具有返回值。

如何声明该块在 dispatch_async 内返回 UIImage?这甚至是可能的,还是在块完成执行时该方法已经完成?

4

1 回答 1

1

好吧,使用 return 将要求您的方法是同步的,因此没有解决方案。您将需要使用块作为函数的一部分,如下所示:

- (void)myMethodOnFinish:(void(^)(UIImage *))finishBlock {

    dispatch_queue_t downloader("downloader", NULL);
    dispatch_async (downloader, ^{

        //do stuff to get UIImage
        UIImage *result = ...;

         dispatch_async (dispatch_get_main_queue, ^{
         //this is the image that image I want myMethod to return
             finishBlock(result);
        });    
    });
}

并像这样调用:

[self myMethodOnFinish:^(UIImage *image) {

    self.imageView.image = image; // or whatever you need to do            

}];
于 2012-11-23T19:55:15.930 回答