我正在努力解决异步性问题;调度,多线程,运行循环等。
有什么区别:
1) 在给定的方法中创建一个 NSURLRequest 和 NSURLConnection,并让它执行并且我们响应委托方法(didReceiveResponse、didReceiveData、connectionDidFinishLoading 等),以及
2)创建一个块并让它 dispatch_async ?
使用第一种方法,我可以访问委托方法似乎很棒(我仍然可以访问那些使用 dispatch 的方法吗?),并且委托方法的执行在触发(或接近它?)时执行
使用块/调度方法,我猜块是在它的线程中同步处理的?然后回到主线程处理结果?我一直在看的示例代码:
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:
kLatestKivaLoansURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
那么,“self performSelector ....”是在收到数据后执行的吗?(我之前的意思是同步 - 也许是错误的术语)。块的下一行将我们送回主线程。
目的是什么,或者为什么会有“waitUntilDone:YES”?是不是因为如果它不存在,其他事情可能不会发生在主线程中?
上面的第一种方法还是只在主线程上执行吗?
最后,在对网页进行 JSON 查询的情况下,每种方法的优缺点是什么?一种方法比另一种方法有什么好处吗?