BOOL Obj-C 2属性的命名约定?

时间:2009-04-30 13:29:38

标签: objective-c cocoa

我有一个只读BOOL属性。这里的主要命名模式是什么?

背景:对于普通的旧方法声明,接受的模式

- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;

在@property世界中,通常表示为

@property(getter=isEditable) BOOL editable;

然而,有相反的例子。例如在CalStore / CalCalendar.h中

@property(readonly) BOOL isEditable;

(这里CalCalendar是错误的,还是只读BOOL属性的可接受的命名模式?)

我有一个管理视图的控制器,可能会也可能不会调整大小。该物业是只读的。

@property(readonly) BOOL viewIsResizable;
@property(readonly) BOOL isViewResizable;
@property(readonly, getter=isViewResizable) BOOL viewResizable;

哪种模式最自然或类似Cocoa?

5 个答案:

答案 0 :(得分:29)

引自ADC

  

如果属性表示为   形容词,格式为:

- (void)setAdjective:(BOOL)flag;
- (BOOL)isAdjective;
     

例如:

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable; 
     

如果属性表示为动词,则格式为:

- (void)setVerbObject:(BOOL)flag; 
- (BOOL)verbObject;
     

例如:

- (void)setShowsAlpha:(BOOL)flag;
- (BOOL)showsAlpha; 
     

动词应该是简单的现在时。

| K<

答案 1 :(得分:5)

我认为这不重要,因为KVO会同时关注is<Key><Key>

看看iPhone课程,我见过的最常见的模式是:

  

@property(非原子,getter = isHidden)BOOL隐藏;

这是让你以这些方式访问该物业:

obj.hidden = YES; // (1)
BOOL hidden = obj.hidden; // (2)
BOOL hidden = [obj isHidden]; // (3)

但不是:

BOOL hidden = obj.isHidden; // (4)

CalStore不遵循该惯例。您将不得不使用第4行而不是第2行。

答案 2 :(得分:4)

你想使用适用于KVO,KVC和绑定等的那个。

我记得在文件中读过KVO等人的文章。将查找is<key>set<key>以及get<key>和其他许多内容,例如countOf<key>

KVC Compliance Checklist解释得比我做得好得多。

答案 3 :(得分:3)

CalStore示例似乎违反了惯例。我坚持使用属性名称而不是方法名称,其中没有“is”。

答案 4 :(得分:-2)

对于BOOL getter,约定肯定是is...。您在CalStore中看到属性设置的原因很可能是因为它是只读的,并且为了头文件的基本可读性而编写,因为:

@property(readonly) isEditable;

通常比以下更容易阅读:

@property(readonly, getter=isEditable) editable;

对于第一种类型的属性,在您的实现中,您可以执行以下任一操作:

@synthesize isEditable = editable;

或只是定义访问者:

- (BOOL)isEditable(void) { return editable; }

这使得潜在用户更容易阅读界面文件(标题)。