0

次のコードがあります。時々デッドロックが発生する理由の手がかりはありますか? ほとんどの場合、うまく機能し、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);
    });

});
4

1 に答える 1

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

これが問題になる可能性があります。メイン キューに同期的にディスパッチするべきではありません。

常にロックされるとは限らないという事実は、私に興味をそそります。

于 2012-06-01T06:09:23.257 に答える