基本上:一个方法需要返回一个在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)')
有任何想法吗?
解决方法 当你说return dict;时,你实际上是在尝试将dict返回给调度块的调用者(运行后台asyncs的自动进程) – 这不起作用.由于您使用的是异步方法,因此无法将块中接收的数据返回给您启动网络 *** 作的方法.到调用该块中的代码时,系统执行该方法的时间很长.
你需要做的是设置一个委托系统 – 如果这是一个帮助类,你可以添加一个协议,包括像dIDFinishLoadingStuff:(NSDictionary *)这样的方法.
然后你会改变
- (NSData *) fetchNSDictionary{...}
喜欢的东西
- (voID)getDictionaryWithDelegate:(NSObject<StuffgetterProtocol> *)delegate{...}
而不是返回dict;,你会说:
[delegate dIDFinishLoadingStuff:dict];
当然,在您调用它的任何类中实现委托方法:
- (voID)dIDFinishLoadingStuff:(NSDictionary *)stuff{ //do something with stuff}总结
以上是内存溢出为你收集整理的ios – 返回dispatch_async获取的变量全部内容,希望文章能够帮你解决ios – 返回dispatch_async获取的变量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)