4

我正在通过NSURLConnectionDelegateapple.developer.com 网站上的类参考。在那里,我意识到一些功能,例如connectionDidFinishLoadingIOS 类中不存在,但在 MAC 库中存在。

然后,当我尝试在 XCODE 中为 IOS 应用程序使用这些功能时,自动完成功能无法完成,但功能确实按预期工作。

谁能解释一下这些是如何工作的,这会在部署应用程序时引起任何问题吗?谢谢!!

4

2 回答 2

4

这有点奇怪。的文档NSURLConnectionDelegate说:

NSURLConnectionDelegate 协议定义了由 NSURLConnection 对象的委托实现的可选方法。

操作词是可选的。

但是,NSURLConnection类参考说:

NSURLConnection 的委托方法——由 NSURLConnectionDelegate 协议定义——允许对象接收关于 URL 请求异步加载的信息回调。其他委托方法提供允许委托自定义执行异步 URL 加载过程的工具。在为关联的 NSURLConnection 对象启动异步加载操作的线程上调用这些委托方法。

这两个人似乎自相矛盾。

最后,“URL 加载系统编程指南”说:

为了下载 URL 的内容,应用程序需要提供一个委托对象,该对象至少实现以下委托方法:connection:didReceiveResponse:、connection:didReceiveData:、connection:didFailWithError: 和 connectionDidFinishLoading:。

这是你所期望的,因为NSURLConnection没有这些委托方法几乎没有用。

查看头文件NSURLConnection似乎有一个NSURLConnectionDataDelegate协议列出了所需的委托方法。但是,它们被标记为@optional在标题中。根据定义NSURLConnectionDataDelegate它必须实现NSURLConnectionDelegate

如果你声明你的委托类来实现NSURLConnectionDataDelegate协议,Xcode 将自动完成委托方法。

这一切让我觉得有点乱。Cocoa/Cocoa Touch API 通常比这更简洁。

我当然不认为 Apple 可以拒绝使用这些委托方法的应用程序,因为NSURLConnection没有它们真的无法工作。

于 2012-07-06T03:31:20.377 回答
1

请记住,如果您发现 API 不一致,您需要向RADAR提交错误报告,正如 Black Pixel 的友好人员所解释的那样:RADAR 或 GTFO

于 2012-07-06T15:27:14.487 回答