Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Objective c 目标C中的协议命名_Objective C_Protocols - Fatal编程技术网

Objective c 目标C中的协议命名

Objective c 目标C中的协议命名,objective-c,protocols,Objective C,Protocols,我正在努力解决Objective-C中的命名协议。例如: 我有一个叫做命令的协议。 我有一个实现Command的抽象类,它是我的具体命令的基类 我相信可以同时调用协议和基类“Command”,但这会造成混淆,如果需要在实现中引用协议,则会导致导入冲突。我也明白,在目标C中,使用前缀表示协议是不好的形式。有些示例在末尾添加了“ing”,但在本例中,这没有任何意义。调用抽象类“CommandBase”似乎也是错误的 那么我应该如何命名它们呢?这一部分中的所有内容都包含在苹果的可可编码指南中 提交人说

我正在努力解决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
对象实现-一个符合委托协议的不同对象。问题是关于定义抽象基类中行为的协议,对于抽象基类,方法由基类本身(或具体子类)实现。对于这种情况,
委托
协议命名约定不适用。