我有以下代码。为什么我偶尔会遇到僵局的任何线索?大部分时间它运行良好,似乎当wi-fi到3g转换发生或应用程序变为非活动状态并恢复生存时,会发生死锁。
-(void) dictionaryFromJSONWithURL: (NSURL *) URL callback: (void (^)(NSDictionary* resp, NSError* error)) block{
#ifdef TX_DEBUG
NSLog(@"%s", __FUNCTION__);
#endif
dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 ), ^(void){
NSData* data = [NSData dataWithContentsOfURL:URL ];
NSError* error = nil;
NSDictionary* dict = [NSJSONSerialization
JSONObjectWithData:data //1
options:kNilOptions
error:&error];
dispatch_sync(dispatch_get_main_queue(), ^{
if(error || !dict) block(nil, error);
else block(dict, nil);
});
});
答案 0 :(得分:0)
dispatch_sync(dispatch_get_main_queue(), ^{
if(error || !dict) block(nil, error);
else block(dict, nil);
});
此可能是问题所在,您不应该同步调度到主队列。
它并不总是锁定的事实引起了我的兴趣。