除非我遗漏了一些东西,它似乎是任意的.h文件我把协议定义。我甚至想,如果它可能是在它自己的.h文件中...(在Java中,它在它自己的文件)在它自己的.h文件中定义的objective-c协议?
回答
我觉得只要是某处定义并包含在你的文件之一编译,它被定义。 Objective-C中没有像“ClassName.java”这样的约定,就像在Java中一样。
当你想要做的事情一样categories对于像私有方法/属性这是非常有益的。
在Objective-C中是一样的。因为协议是在类之间共享的方法列表。协议只是没有相应实现的方法列表。他们意味着要由其他人来实施。
协议通常在他们自己的.h文件中定义(以我的经验)。但是它们可以在shared.h文件中定义。很难让协议的用户在共享文件安排中采用协议,而且,它会混乱你的API。如果协议位于自己的.h文件中,文档和用法可能会更容易。
另外,如果你只需要包括协议.h文件中,而不是在有其他类的声明.h文件利用您的协议之类的多态的实现将有更少的开销。我不知道这种想法的确切成本/储蓄,但我读过会有一些(较小的二进制?)
问候, 弗兰克
我认为该协议的位置取决于你如何使用它。很多时候,一个协议被用来为另一个类定义委托或数据源的功能。如果是这样的话,我认为你可以放心地将协议定义放在另一个类的顶部 - 因为它们必须一起使用。
如果定义在地方共享的基类的协议,你应该把它放在一个单独的文件。例如,我有几个不同的类来实现“操作”协议。我的其他一些函数希望接收一个实现协议的对象,并且不关心实际的类。在这种情况下,将协议定义放在它自己的头文件中是很有意义的,所以你可以把它包含在它自己的头文件中。
Benny是对的 - 尽管从技术角度来看,它在定义为,无论你放在哪里(只要它被包含在使用之前的某个地方)。
这真的是Objective-C中风格的问题。我认为真正的“正确”方式是为协议创建一个单独的.h文件,如果我制作的协议不属于其他任何内容(例如NSCoding),那就是我所要做的。另一方面,大多数情况下,当我创建一个协议(或者一个非正式的协议,通过在NSObject上使用一个类别)时,它会绑定到另一个类,比如NSTableView的数据源非正式协议。在这些情况下,为了简单起见,我只是将该声明放在该类的头文件中。
还看到苹果公司的Communicating with Objects,其中讨论的代表,协议和选择。虽然它在Mac OS X中列出,但大多数(如果不是全部的话)似乎也适用于iOS。
- 1. 找不到协议声明时协议在它自己的.h文件中
- 2. Torrent文件协议 - 自定义字段
- 3. 定义自定义协议
- 4. 自定义协议
- 5. TableviewDataSource在自己的文件不符合协议UITableViewDataSource在迅速
- 6. 在定义中应该与协议名称相同的协议的文件名?
- 7. wp7中的自定义协议
- 8. 自定义协议中的XMPP错误
- 9. SCIM协议中的自定义资源
- 10. 在Javascript中调用自定义协议
- 11. 在协议中的自定义类定义的错误
- 12. 自定义RS485协议
- 13. 自定义协议支持
- 14. Pyside qwebview自定义协议
- 15. 我应该为我的协议创建一个自己的.h文件吗?是否有命名约定?
- 16. 在协议中定义@property
- 17. 的Android Jwebsocket自定义协议
- 18. ObjectiveC中的UITextView的自定义图标
- 19. 如何开发我自己的协议
- 20. 用QT4创建自己的URL协议
- 21. 如何发送自己的协议包?
- 22. 面向协议的Swift中的自定义组件编程
- 23. IOS应用程序 - 在单独的文件中定义协议
- 24. 将自定义协议的插件添加到Wireshark中
- 25. 无法找到协议声明自定义协议委托iphone
- 26. 如何在RichTextBox的超链接中使用自己的协议?
- 27. 如何使浏览器从自定义协议打开文件?
- 28. .h文件中的重定义错误
- 29. 在Android中处理http协议的自定义url
- 30. 创建自定义协议(Windows 7)
我一直在代码审查的地方,我发现一个协议被重写的类的数量,我创建一个单独的文件来定义protocol.but错过了导入该文件。你的答案“(只要它在使用之前包含在某个地方)。”谢谢+ – Alok 2014-11-01 09:11:55