现在我在方法中调度一段代码,使用以下格式为我下载内容:
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?这是否可行,或者该方法是否已在块完成执行时完成?
答案 0 :(得分: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
}];