为什么不需要在NSURLConnectionDelegate协议中声明的NSURLConnection委托方法

时间:2012-07-06 03:10:43

标签: iphone xcode macos nsurlconnection

我正在浏览apple.developer.com网站上的NSURLConnectionDelegate类引用。在那里,我意识到像connectionDidFinishLoading这样的函数在IOS类中不存在,但在MAC库中存在。

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

任何人都可以解释这些是如何工作的,这会在部署应用时导致任何问题。 谢谢!

2 个答案:

答案 0 :(得分:4)

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

  

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

操作词有可选

但是,NSURLConnection类引用说:

  

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

这两个似乎自相矛盾。

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

  

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

如果没有这些委托方法,NSURLConnection对于NSURLConnection的期望是非常无用的。

查看NSURLConnectionDataDelegate的头文件,看来有一个@optional协议,列出了所需的委托方法。但是,它们在标题中标记为NSURLConnectionDataDelegate。根据{{​​1}}的定义,它必须实施NSURLConnectionDelegate

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

这对我来说都感觉有些混乱。 Cocoa / Cocoa Touch API通常比这更加整洁。

我当然没有看到Apple可以拒绝使用这些委托方法的应用程序,因为NSURLConnection如果没有它们就行不通。

答案 1 :(得分:1)

请记住,如果您发现API不一致,则需要使用RADAR提交错误报告,因为Black Pixel的友好人员解释说:RADAR or GTFO