ios - NSURLConnection connectionWithRequest :delegate and sendAsynchronousRequest:queue:completionHandler? 之间的主要区别是什么

标签 ios iphone objective-c

我想知道这两个 NSURLConnection 协议(protocol)或方法(或它们实际调用的任何内容)的区别。

我是 Objective-C 编程的新手,我正在尝试创建一个从网站加载数据的 iOS 应用程序。我在看过/读过的教程中注意到,当他们使用 connectionWithRequest 时,他们还有其他方法,这些方法在我看来是 connectionWithRequest 正常工作所需的方法。一个教程是 this .这些方法是:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

仅举两个例子。对此,我还有一个问题:当调用或使用 NSURLConnection connectionWithRequest:delegate 时,是否会自动调用这些方法?

我提到的两个 NSURLConnection 协议(protocol)到底有什么区别?哪个更好用?

最佳答案

主要区别在于不同类型的回调:

  • 方法 -connectionWithRequest:delegate: 使用委托(delegate),您必须实现 didReceiveResponsedidReceiveData 和其他方法才能发挥作用。这更复杂,但允许您处理安全身份验证、进度跟踪和类似的事情。

  • 方法 +sendAsynchronousRequest:queue:completionHandler: 使用 block 完成,与委托(delegate)相比,这容易得多。它处理接收响应和附加主体数据,并简单地为您提供结果。

脚注:iOS 7 引入了全新的 NSURLSessions URL 加载机制,可以用来代替 NSURLConnection

关于ios - NSURLConnection connectionWithRequest :delegate and sendAsynchronousRequest:queue:completionHandler? 之间的主要区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664816/

相关文章:

iphone - 是否可以直接在 google plus 上发布而无需在网络上添加其他共享对话框

objective-c - NSMenuItem 自定义 View 上方的间隙

ios - 企业 iOS 应用程序中的游戏中心?

ios - 查看 iOS 应用程序是否使用 Swift 编译

ios - UIPickerView - 用于计算的值传递

iphone - 声音引擎泄漏……预加载是一种不好的做法吗?

ios - View 不适合 ios 中的 ipad 视网膜

ios - UIScreen.mainScreen 在所有设备上大小相同

objective-c - 使用分布式对象时出现 NSPort TimeoutException

iOS Autolayout 让标签位于图像之上