【问题标题】:Parsing JSON using Grand Central Dispatch in connectionDidFinishLoading:?在 connectionDidFinishLoading 中使用 Grand Central Dispatch 解析 JSON:?
【发布时间】:2012-03-01 21:50:46
【问题描述】:

我正在使用 JSONTouch 执行 JSON 反序列化,但是它花费的时间太长并且它阻塞了 UI,所以我尝试创建一个 GCD 后台队列来将序列化放在后台线程中。有时它运行良好,但有时我在deserializeAsDictionary:weakSelf.mutableData error:&theError]; 上得到一个 EXC_BAD_ACCESS。

我不知道为什么。我已将 mutableData 设为原子属性。我一次发出 3 个请求,所以我猜这与试图访问 mutableData 的线程有关?或者当块运行时 mutableData 状态不是很好?

非常感谢!

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
     __weak myViewController *weakSelf = self;

    dispatch_queue_t updateQueue = dispatch_queue_create("parse json", NULL);
    dispatch_async(updateQueue, ^{
        NSError *theError = nil;

    // This is the call that gives me EXC_BAD_ACCESS
    NSDictionary *dict = [[CJSONDeserializer deserializer] 
       deserializeAsDictionary:weakSelf.mutableData error:&theError];

   dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf setMutableData: nil];
      });
   });
   dispatch_release(updateQueue);
}

【问题讨论】:

    标签: json ios5 grand-central-dispatch touchjson


    【解决方案1】:

    问题是我使用一个mutableData 对象来存储三个请求的响应,当一个连接完成并且connectionDidFinishLoading: 处理程序正在读取数据时,另一个线程中的另一个连接正在向它附加数据.

    我为每个请求创建了一个单独的 NSMutableData 对象,并将代码添加到 connectionDidFinishLoading: 以便它从正确的 NSMutableData 对象中读取。

    由于处理程序正在另一个 GCD 队列中运行,我的应用程序响应速度非常快!

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多