3

我希望我的所有实例变量都是私有的和公共方法中的访问器/突变器。我想知道在构建大型类时是否应该注意一个命名约定,该约定既是为了其他开发人员的可读性,也是一个防止方法名称与其他类发生冲突的约定。

例如,如果我想要一个类访问和更改一个名为“支持音乐家”的“质量”(不一定是特定变量),那么使用 and[myInstance setSupportsMusicians:YES]作为所有其他变异器和访问器的方法名称前缀是否[myInstance returnSupportsMusicians]是可接受的名称?setreturn

显然,我知道我可以为它们命名任何我想要的名称,但我想获得一些意见,因为我知道命名约定是有组织的开发的重要组成部分。

4

2 回答 2

4

你最好@property用来声明这样的事情。这样,您可以获得它的所有实现优势(如原子性、自动 ivar 生成等)以及方便的点语法(例如myInstance.supportsMusicians = YES),而完全不必担心底层方法名称。

但是,如果您确实想手动声明您的方法,或者只想知道自动生成的方法是什么,那么命名约定是:

- (void)setSupportsMusicians:(BOOL)supportsMusicians;
- (BOOL)supportsMusicians;

某些类型的布尔属性还有一个侧面案例,其中“is”用作可读性的前缀,例如

- (BOOL)isVisible;

然而,这并没有被普遍遵循,并且可能被视为遗留约定。

请注意,不应随机使用“get”作为前缀,因为它具有特定含义:它用于调用者提供要填充的缓冲区的上下文中,例如-[NSString getBytes:length:].

于 2012-11-22T07:33:02.820 回答
2

set 和 get 是 Java 和其他一些语言风格。

但可可风格是(伪代码,用于名称):

可可中的 setName() 是 setName:

可可中的 getName() 是名称:

编辑:这仅用于命名约定,不要将其作为方法的语法。

几个有用的链接:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

http://cocoadevcentral.com/articles/000082.php

于 2012-11-22T06:11:19.447 回答