【发布时间】:2013-11-24 22:08:12
【问题描述】:
基本上:一个方法需要返回一个在 dispatch_async 中获取的 NSDictionary。这是我尝试过的:
- (NSDictionary *)fetchNSDictionary {
dispatch_queue_t Queue = dispatch_queue_create("Dictionary fetcher", NULL);
dispatch_async(Queue, ^{
NSDictionary *dict = ...
dispatch_async(dispatch_get_main_queue(),^{
return dict;
)};
)};
}
结果:
Incompatible block pointer types passing 'NSDictionary *(^)(void)'
to parameter of type 'dispatch_block_t' (aka 'void (^)(void)')
有什么想法吗?
【问题讨论】:
-
严格来说,不能满足“方法需要返回一个在 dispatch_async 中获取的 NSDictionary”的要求。当方法返回时,根据异步的定义,结果尚未评估。因此,您无法获得返回的结果,除非您强制该方法变为同步 - 但是这是一种“反模式”、“代码异味”、不好的做法以及其他不太好的事情;)
-
我的鼻子被堵住了,所以直到 Undo 的回答我才意识到这个概念有多糟糕。
标签: ios objective-c multithreading objective-c-blocks