当所有方法都是可选的时,为什么要使用Objective-C协议?

时间:2011-07-05 05:41:44

标签: iphone objective-c ios protocols

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

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

4 个答案:

答案 0 :(得分:2)

如果您实现了自己的委托协议,如果您尝试调用方法而不在某处声明它们(x可能不响应选择器......),您将收到编译器警告。

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

当您开始在班级中键入新方法时,Xcode也足够智能,可以根据您的班级符合的协议建议方法签名。

答案 1 :(得分:0)

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

  

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

如果你不想要这些协议的帮助,你可以简单地省略它。

答案 2 :(得分:0)

因为您的程序不一定对所有感兴趣,而是某些。实现的重要部分是

答案 3 :(得分:0)

在OOP中,通常通过接口编程(在目标c协议中是接口)而不是实现,因为这是一种灵活而强大的实现可靠软件架构的方式,在这种方式中你不必关心如何使用类是实现但只是它匹配某个接口。 (在Google上搜索关于参数的信息:http://www.google.com/search?hl=en&source=hp&biw=1436&bih=768&q=program+by+interface+not+by+implementation&oq=program+by+inter&aq=2j&aqi=g-j2&aql=&gs_sm=e&gs_upl=849l7924l0l10059l20l16l2l3l3l0l283l1295l7.3.1l11l0