【发布时间】:2011-07-06 04:03:10
【问题描述】:
我目前正在使用带有 GCD 队列的同步 ASIHTTPRequest 从 Internet 下载数据,然后使用 JSONKit 解析响应数据。您如何看待这种模式。提前谢谢你。
这是我的代码:
dispatch_async(queue, ^(void) {
// Request is ASIHTTPRequest.
[request startSynchronous];
// Parse JSON.
NSArray *array = [[request responseData] objectFromJSONDataWithParseOptions:JKParseOptionLooseUnicode];
// Callback on the main queue to update UI.
dispatch_async(dispatch_get_main_queue(), ^(void) {
callbackBlock(array);
});
});
编辑:我使用 ASIHTTPRequest 的原因是我需要修改 OAuth 的请求标头并使用 POST 方法上传图像。
【问题讨论】:
-
无论如何我都不是 GCD 专家,但我不明白为什么内部块需要异步执行,因为它运行在已经异步执行的外部块中。跨度>
-
@Jason,需要这样做才能在主线程上运行。
-
我的理解是 dispatch_sync 将在您指定的不同线程(例如主线程)上执行您的块;不同的是它会阻塞当前的当前线程,直到它完成。 GCD 文档似乎表明它可能比 dispatch_async 更有效。
-
我怀疑主要的效率增益是在同一个线程上运行块的可能性。主队列的
dispatch_sync无法做到这一点,但需要设置dispatch_async没有的同步。 -
这也是我使用的一种模式。我很想听听为什么我应该/不应该继续使用它的任何原因。 :)
标签: objective-c cocoa asihttprequest grand-central-dispatch