ios – 执行NSURLRequest和响应委托与使用dispatch_async相比有什么区别?

ios – 执行NSURLRequest和响应委托与使用dispatch_async相比有什么区别?,第1张

概述我试图绕过异步性;调度,多线程,运行循环等. 有什么区别: 1)在给定方法中创建NSURLRequest和NSURLConnection,并让它执行并响应委托方法(didReceiveResponse,didReceiveData,connectionDidFinishLoading等),以及 2)创建一个块并使其具有dispatch_async? 使用第一种方法,我可以访问委托方法(我是否仍然可 我试图绕过异步性;调度,多线程,运行循环等.

有什么区别:

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查询的情况下,每种方法的优缺点是什么?一种方法比另一种方法有什么好处吗?

解决方法 1)当您使用NSURLConnection时,无论是在主线程中还是在NSOperation中,您都可以完全控制在任何时候停止它并跟踪其进度.你得到的是各种各样的事情发生时的委托方法,但你不是坐着等待完成某事.如果你想在任何时候停止它,你发送它取消,然后你可以释放(或零)它并忘记它.

2)所以看看这个.如果你在主线程中执行了这个调用,它会等到它成功或失败.一旦开始,它必须运行成功或失败.如果在主线程中,这将阻止您的UI.把它放在一个块中并在其他一些线程上运行,同样的事情会发生 – 选择的线程将阻塞直到方法结束.使用’self’发送结果将保留自我.因此,如果自己说一个UIVIEwController,那么即使你d出它(认为它会被删除),它仍然存在,直到这个方法完成,天堂知道什么.这种用法非常危险并且可能经常工作但是当设备具有糟糕的inet连接时(例如)会发生灾难性故障.

等待直到确实是同步线程.如果您想知道该方法已在主线程上运行,并且只有继续,请使用YES.如果你只是想让方法排队并且你已经完成了(就像在这种情况下)你只需要使用NO.

该方法肯定会在主线程上 – 这个Apple向你承诺这个方法.

3)JsON

我认识的大多数用户都使用来自NSOperations或块的NSURLConnections.可以取消 *** 作(这将取消连接) – 因此无论发生了多少,您都可以按下“后退”按钮.如果查询失败,您可以查看HTML状态(您是否收到400或500错误?超时?等)

在github上有一个开源项目,几乎没有200行代码,它提供了一个优雅且易于使用的帮助程序类来运行 *** 作(带有演示代码):/NSOperation-WebFetches-MadeEasy.我个人在商店中的8个应用程序中使用了这个代码取得巨大成功 – 单个OperationsRunner通常会同时进行数百个提取,并且应用程序有多个类同时运行OperationsRunner.

如果您在NSOperation中处理JsON,您将在具有多个核心的设备上获得真正的加速.

总结

以上是内存溢出为你收集整理的ios – 执行NSURLRequest和响应委托与使用dispatch_async相比有什么区别?全部内容,希望文章能够帮你解决ios – 执行NSURLRequest和响应委托与使用dispatch_async相比有什么区别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存