gpt4 book ai didi

iphone - 为什么不需要在 NSURLConnectionDelegate 协议(protocol)中声明 NSURLConnection 委托(delegate)方法

转载 作者:行者123 更新时间:2023-12-03 19:11:40 26 4
gpt4 key购买 nike

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

然后,当我尝试在 IOS 应用程序的 XCODE 中使用这些函数时,自动完成功能不会完成它,但函数确实会按预期工作。

任何人都可以解释一下它们是如何工作的以及这会在部署应用程序时导致任何问题吗?谢谢!!

最佳答案

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

The NSURLConnectionDelegate protocol defines the optional methods implemented by delegates of NSURLConnection objects.

关键词是可选

但是,NSURLConnection 类引用说:

NSURLConnection’s delegate methods—defined by the NSURLConnectionDelegate protocol—allow an object to receive informational callbacks about the asynchronous load of a URL request. Other delegate methods provide facilities that allow the delegate to customize the process of performing an asynchronous URL load. These delegate methods are called on the thread that started the asynchronous load operation for the associated NSURLConnection object.

这两者似乎是矛盾的。

最后,《URL加载系统编程指南》说:

In order to download the contents of a URL, an application needs to provide a delegate object that, at a minimum, implements the following delegate methods: connection:didReceiveResponse:, connection:didReceiveData:, connection:didFailWithError: and connectionDidFinishLoading:.

这正是您所期望的,因为如果没有这些委托(delegate)方法,NSURLConnection 几乎毫无用处。

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

如果您声明委托(delegate)类来实现 NSURLConnectionDataDelegate 协议(protocol),Xcode 将自动完成委托(delegate)方法。

这一切让我感觉有点困惑。 Cocoa/Cocoa Touch API 通常比这简洁得多。

我当然不认为 Apple 会拒绝使用这些委托(delegate)方法的应用程序,因为没有它们,NSURLConnection 确实无法工作。

关于iphone - 为什么不需要在 NSURLConnectionDelegate 协议(protocol)中声明 NSURLConnection 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11355329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com