Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么在所有方法都是可选的情况下使用Objective-C协议?_Iphone_Objective C_Ios_Protocols - Fatal编程技术网

Iphone 为什么在所有方法都是可选的情况下使用Objective-C协议?

Iphone 为什么在所有方法都是可选的情况下使用Objective-C协议?,iphone,objective-c,ios,protocols,Iphone,Objective C,Ios,Protocols,我总是觉得协议应该帮助我实现某些方法,这样我的对象就会响应某些消息。如果我忘记了一个方法或键入错误,编译器会告诉我 但是,当所有方法都是可选的时,为类设置协议有什么用呢?就像在NSSpeechSynthesizerDelegate协议中一样。编译器没有提醒我实现一些方法,他也没有告诉我方法名是否写错了。即使没有协议,程序也可以正常工作。如果您实现自己的委托协议,如果您尝试在未声明方法的情况下调用这些方法,则会收到编译器警告(x可能不会响应选择器…) 它还有助于文档和代码完成,以定义协议。如果您想

我总是觉得协议应该帮助我实现某些方法,这样我的对象就会响应某些消息。如果我忘记了一个方法或键入错误,编译器会告诉我


但是,当所有方法都是可选的时,为类设置协议有什么用呢?就像在NSSpeechSynthesizerDelegate协议中一样。编译器没有提醒我实现一些方法,他也没有告诉我方法名是否写错了。即使没有协议,程序也可以正常工作。

如果您实现自己的委托协议,如果您尝试在未声明方法的情况下调用这些方法,则会收到编译器警告(x可能不会响应选择器…)

它还有助于文档和代码完成,以定义协议。如果您想知道支持哪些委托方法,只需查看相应的头文件(或由此生成的文档页面)


当您开始在类中键入新方法时,Xcode也足够聪明,可以从您的类所遵循的协议中建议方法签名。

您可以省略包含所有可选方法的协议,如果您根本不需要它们,。说,

然而,Objective-C程序不需要使用协议。与类定义和消息表达式不同,它们是可选的。一些框架使用它们;有些没有。这完全取决于手头的任务


如果您不需要这些协议的帮助,您可以省略它。

因为您的程序不一定对所有协议都感兴趣,而是对某些协议感兴趣。实现的重要部分是。在OOP中,按接口编程(在objective c中,协议是接口)而不是实现是常见的,因为这是实现可靠软件体系结构的灵活而强大的方法,您不必关心类是如何实现的,只需关心它是否匹配某个接口即可。(在谷歌上搜索关于这个论点:)