Objective c 目标C中的协议命名
我正在努力解决Objective-C中的命名协议。例如: 我有一个叫做命令的协议。 我有一个实现Command的抽象类,它是我的具体命令的基类 我相信可以同时调用协议和基类“Command”,但这会造成混淆,如果需要在实现中引用协议,则会导致导入冲突。我也明白,在目标C中,使用前缀表示协议是不好的形式。有些示例在末尾添加了“ing”,但在本例中,这没有任何意义。调用抽象类“CommandBase”似乎也是错误的Objective c 目标C中的协议命名,objective-c,protocols,Objective C,Protocols,我正在努力解决Objective-C中的命名协议。例如: 我有一个叫做命令的协议。 我有一个实现Command的抽象类,它是我的具体命令的基类 我相信可以同时调用协议和基类“Command”,但这会造成混淆,如果需要在实现中引用协议,则会导致导入冲突。我也明白,在目标C中,使用前缀表示协议是不好的形式。有些示例在末尾添加了“ing”,但在本例中,这没有任何意义。调用抽象类“CommandBase”似乎也是错误的 那么我应该如何命名它们呢?这一部分中的所有内容都包含在苹果的可可编码指南中 提交人说
那么我应该如何命名它们呢?这一部分中的所有内容都包含在苹果的可可编码指南中 提交人说: 协议应根据其分组行为的方式命名: 大多数协议将与任何方法都不关联的方法分组 特别是班级。应命名此类型的协议,以便 协议不会与类混淆。一个常见的惯例是使用 动名词(“…ing”)形式: 很好 NSLock-Poor(似乎是类的名称) 一些协议将一些不相关的方法分组(而不是创建 几个单独的小型协议)。这些协议往往是 与作为的主表达式的类关联 协议在这些情况下,公约将赋予议定书 与类同名 这种协议的一个例子是NSObject协议。这 协议组方法,可用于查询任何对象的 在类层次结构中的位置,使其调用特定的方法, 以及增加或减少其引用计数。因为 NSObject类提供这些方法的主要表达式 协议以类命名
我建议,在您的情况下,将协议和基类命名为相同的名称并不一定是坏事,因为您的类是协议的主要表达式(例如使用
NSObject
)
来自苹果的:
一些协议将一些不相关的方法分组(而不是创建
几个单独的小型协议)。这些协议往往是
与作为的主表达式的类关联
协议在这些情况下,公约将赋予议定书
与类同名。这种协议的一个例子是
NSObject协议。此协议对可用于
查询任何对象在类层次结构中的位置,使其
调用特定的方法,并递增或递减其引用
计数因为NSObject类提供了
在这些方法中,协议以类命名
如果您将看到uitableview的预定义协议NSUrlconnection,那么您将获得协议的名称,就像UItabaleviewDelegate和NSURLConnectionLegate一样 然后您就可以很容易地理解哪个委托属于哪个类
因此,您可以使用classnameDelegate作为协议名…谢谢因此,鉴于我无法将协议放在同名文件中,协议是否应该驻留在抽象类的头文件中?答案如下:@1ndivisible:是的,在抽象类头文件的顶部定义协议。要使用与我的回答中相同的无聊示例,请查看
NSObject
的头文件-它实际上在头文件中定义了许多协议,但对于以这种方式实现协议的任何抽象基类,其原理都是相同的。谢谢。我有许多在一组框架类之间共享的协议。它们并不特别属于任何类,而是在它们之间使用。您认为可以将协议放在一个单独的头文件中吗?@1ndivisible:一般来说,我不会这样做,因为它在某种程度上破坏了封装。这可能不会给您的代码带来任何问题,但我认为最好将它们分开,只将您需要的导入到给定的框架类中。如果它们都是相关的(例如,一个对象及其委托的协议),或者如果一个基类实现了各种协议的方法(在这种情况下,我会在基类的头中定义它们),我只会在同一个位置定义它们。(1)问题不是关于委托协议。在您引用的示例中(UITableView
&NSURLConnection
),相关协议由delegate
对象实现-一个符合委托协议的不同对象。问题是关于定义抽象基类中行为的协议,对于抽象基类,方法由基类本身(或具体子类)实现。对于这种情况,委托
协议命名约定不适用。