命名原则

一般性原则:

  • 可读性高(简洁且清晰)和防止命名冲突(通过加前缀后缀来保证)。
  • Objective-C 的命名通常都比较长, 名称遵循驼峰式命名法. 一个好的命名标准很简单, 就是做到在开发者一看到名字时, 就能够懂得它的含义和使用方法. 另外, 每个模块都要加上自己的前缀, 前缀在编程接口中非常重要, 可以区分软件的功能范畴并防止不同文件或者类之间命名发生冲突, 比如 DKTableView、DKDataBase | 代码 | 是否正确规范 | | —- | —- | | insertObject:atIndex: | 正确 | | insert:at: | 不清晰,没有说明插入什么,插到哪里 | | removeObjectAtIndex: | 正确 | | removeObject: | 正确,因为⽅法是⽤来移除作为参数的对象 | | remove: | 不清晰,没有说明要移除什么 |

一致性:
尽可能与 Cocoa 编程接⼝命名保持一致。如果不太确定某个命名的⼀致性,请浏览头文件或参考文档中的范例,在使⽤多态方法的类中,命名的⼀致性⾮常重要。在不同类中实现相同功能的⽅法应该具有同的名称。

代码 点评
– (NSInteger)tag 在 NSView, NSCell, NSControl 中有定义
– (void)setStringValue:(NSString *) 在许多 Cocoa classes 中都有定义

文件命名

文件的扩展名应该如下:

文件名规范 文件类型
.h C / C++ / Objective-C 头文件
.m Objective-C 实现文件
.mm Objective-C / C++ 实现文件
.cc 纯 C++ 实现文件
.c 纯 C 实现文件

分类的文件名应该包含被扩展的类名,如:NSString+DKUtils.h 或 NSTextView+DKAutocomplete.h。

编码命名

类的命名

  • 类名(以及类别、协议名)应首字母大写,并以驼峰格式分割单词。
  • 所有类名、枚举、结构、protocol 定义时最好加一个统一的标示符,可以是项目缩写,或者个人项目的名称缩写,目前规定都加上大写的 DK 作为根前缀。
  • 根据功能模块可以给功能模块的类添加功能模块的名称前缀,如用户中心的控制器,属于 Profile 模块,可以命名为 DKProfileViewController。

    声明定义

  • 所有 protocol 定义时,都加上后缀 Delegate。
    比如 DKRefreshViewDelegate,表示 RefreshView 的协议

  • 所有的通知名都加上 Notification,通知名格式为:
    [ 触发通知的类名 ] + [Did/Will] + [ 动作 ] + Notification

例如:

  1. NSWindowDidMiniaturizeNotification
  2. NSTextViewDidChangeSelectionNotification
  3. NSColorPanelColorDidChangeNotification

方法命名

  • 小驼峰原则
    方法名应遵守小驼峰原则首字母小写,其他单词首字母大写,每个空格分割的名称以动词开头。执行性的方法应该以动词开头,小写字母开头,返回性的方法应该以返回的内容开头,但之前不要加 get。 ```objectivec
  • (void)insertModel:(id)model atIndex:(NSUInteger)atIndex;

  • (instancetype)arrayWithArray:(NSArray *)array; ```

  • 代理方法
    以发送代理的对象类名作为代理方法名的开始(去掉类名的前缀,并且小写开头) ```objectivec

  • (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;

  • (BOOL)application:(NSApplication )sender openFile:(NSString )filename;

    1. <a name="GbKtX"></a>
    2. ### 枚举命名
    3. ```objectivec
    4. typedef NS_ENUM(NSInteger, DKGlobalConstants) {
    5. DKPinSizeMin = 1,
    6. DKPinSizeMax = 5,
    7. DKPinCountMin = 100,
    8. DKPinCountMax = 500,
    9. };

    不使用下面这种方式

    1. enum GlobalConstants {
    2. kMaxPinSize = 5,
    3. kMaxPinCount = 500,
    4. };

    宏命名

    以大写 K 开头,后面单词首字母大写,其余小写。如:#define KMaxHeigt 100.0

    属性变量命名

    变量名使用小驼峰法, 使变量名尽量可以推测其用途属性具有描述性。别一心想着少打几个字母,让你的代码可以迅速被理解更加重要。
    每个属性命名都加上类型后缀,如按钮就加上 btn 后缀,imageView 就加上 imgView。
    如果是布尔值的成员变量,要定义 getter 方法 为 isXXX

    1. @property (nonatomic, assign, getter=isEditable) BOOL editable;

    | 标题 | 说明 | | —- | —- | | 类成员变量名 | 成员变量用小驼峰法命名并前缀下划线 | | 局部变量名 | 遵守小驼峰命名规则 | | const 常量 | 以小写 k 开头,后面单词首字母大写 |