gpt4 book ai didi

iphone - dispatch_async 中的自定义 block

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:30 26 4
gpt4 key购买 nike

这段代码有效

[[MyManager sharedManager] makeRequestAndParsingfor:someParameters 
success:^(NSDictionary * dictionary){
// Sucessful response
NSLog(@"Success!!");
}
failure:^(NSError* error){
// Error response
NSLog(@"Failure!");
}];

但是每当我在后台运行相同的程序时,它永远不会进入成功或失败 block 。

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!");
}];
}];

任何人都可以向我解释发生了什么吗? ma​​keRequestAndParsingfor 方法:发出异步请求(再次使用 block ),然后解析结果。我的调试器显示,在第二种情况下,它永远不会获得自己的成功/失败。在第一种情况下,它就像一个魅力。有什么想法吗?

最佳答案

您的方法“makeRequestAndParsingfor”是否使用参数的 block_copy(),并将返回值存储在强变量中(以获取堆中的 block )?还要添加 asserts(),这样您就可以验证是否在“makeRequestAndParsingfor”中获得了两个 block ,甚至可以在调用一个或另一个之前重新测试。 [在过去使用 block_copy() 是必要的,但现在不是 100% 确定。]

请注意,在第二种情况下,“makeRequestAndParsingfor”在并发队列中运行,其中多个可以并发调用 block - 不确定您的成功/失败 block 做了什么,但最好是线程安全的,否则您应该运行“makeRequestAndParsingfor”中主队列上的 block (我在类似构造的应用程序中这样做)。

关于iphone - dispatch_async 中的自定义 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com