使用GCD和NSData时Web请求锁定

时间:2012-06-01 06:03:34

标签: ios httpwebrequest nsdata grand-central-dispatch

我有以下代码。为什么我偶尔会遇到僵局的任何线索?大部分时间它运行良好,似乎当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);
    });

});

1 个答案:

答案 0 :(得分:0)

dispatch_sync(dispatch_get_main_queue(), ^{
        if(error || !dict) block(nil, error);
        else block(dict, nil);
    });

可能是问题所在,您不应该同步调度到主队列。

它并不总是锁定的事实引起了我的兴趣。

相关问题