此代码有效
[[MyManager sharedManager] makeRequestAndParsingfor:someParameters
success:^(NSDictionary * dictionary){
// Sucessful response
NSLog(@"Success!!");
}
failure:^(NSError* error){
// Error response
NSLog(@"Failure!");
}];
但是,只要我在后台运行相同的命令,它就永远不会进入成功或失败块。
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
[[MyManager sharedManager] makeRequestAndParsingfor:someParameters
success:^(NSDictionary * dictionary){
// Sucessful response
NSLog(@"Success!!");
}
failure:^(NSError* error){
// Error response
NSLog(@"Failure!");
}];
}];
谁能解释我会发生什么? 的 makeRequestAndParsing方法:发出一个异步请求(再次带有块),然后解析结果。我的调试器显示,在第二种情况下,它永远不会获得成功/失败。在第一种情况下,它就像一种魅力。有任何想法吗?
最佳答案
您的方法'makeRequestAndParsingfor'是否使用args的block_copy(),并将返回值存储在一个强变量中(以获取堆中的块)?还要添加asserts(),以便您可以验证是否在“makeRequestAndParsingfor”中同时获得了两个块,甚至可以在调用一个或另一个之前进行重新测试。 [在过去使用block_copy()是必要的,但现在不是100%确定。]
请注意,在第二种情况下,“makeRequestAndParsingfor”在并发队列中运行,其中多个可以并发调用这些块-不确定您的成功/失败块将做什么,但是最好是线程安全的,否则您应该在“makeRequestAndParsingfor”中的主队列(我在类似构造的应用程序中执行此操作)。