Cocoa编码规范

Posted iOS大全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocoa编码规范相关的知识,希望对你有一定的参考价值。


英文:《Coding Guidelines for Cocoa》

译文:葛布林大帝

链接:http://www.cnblogs.com/yangfaxian/p/4673894.html


简介:

本文整理自Apple文档《Coding Guidelines for Cocoa》。这份文档原意是给Cocoa框架、插件及公共API开发者提供一些编码指导,实质上相当于Apple内部的编码规范。在多人协作时,一份统一的代码规范大大减少开发者之间的沟通成本,极力推荐。


目录:

一、代码命名基础

二、方法

三、函数

四、Property及其他

五、缩写


一、代码命名基础


1.通用原则

1.1 清晰

尽量清晰又简洁,无法两全时清晰更重要


通常不应缩写名称,即使方法名很长也应完整拼写

你可能认为某个缩写众所周知,但其实未必,特别是你周围的开发者语言文化背景不同时

有一些历史悠久的缩写还是可以使用的,详见第五章

Cocoa编码规范

API命名避免歧义,例如一个方法名有多种理解


Cocoa编码规范

1.2 一致

尽力保持Cocoa编程接口命名一致

如果有疑惑,请浏览当前头文件或者参考文档

当某个类的方法使用了多态时,一致性尤其重要

不同类里,功能相同的方法命名也应相同


Cocoa编码规范

1.3 避免自引用(self Reference)

命名不应自引用,这里的自引用指的是在词尾引用自身

Cocoa编码规范

Mask与Notification忽略此规则

Cocoa编码规范

2.前缀

前缀是编程接口命名的重要部分,它们区分了软件的不同功能区域:

  • 前缀可以防止第三方开发者与Apple的命名冲突

    • 同样可以防止Apple内部的命名冲突

  • 前缀有指定格式

    • 它由二到三个大写字母组成,不使用下划线和子前缀

  • 命名类、协议、函数、常量和typedef结构体时使用前缀

    • 方法名不使用前缀(因为它存在于特定类的命名空间中)

    • 结构体字段不使用前缀

Cocoa编码规范

3.书写约定

在命名API元素时, 使用驼峰命名法(如runTheWordsTogether),并注意以下书写约定:

方法名

  • 小写第一个字母,大写之后所有单词的首字母,不使用前缀

  • 如果方法名以一个众所周知的大写缩略词开始,该规则不适用

如TIFFRepresentation (NSImage)


fileExistsAtPath:isDirectory:


函数及常量名

  • 使用与其关联类相同的前缀,并大写首字母

NSRunAlertPanel

NSCellDisabled


标点符号

  • 由多个单词组成的名称,别使用标点符号作为名称的一部分

    • 分隔符(下划线、破折号等)也不能使用

  • 避免使用下划线作为私有方法的前缀,Apple保留这一方式的使用

    • 强行使用可能会导致命名冲突,即Apple已有的方法被覆盖,这会导致灾难性后果

    • 实例变量使用下划线作为前缀还是允许的


4.class与protocol命名


class

  • class的名称应该包含一个名词,用以表明这个类是什么(或者做了什么),并拥有合适的前缀

  • 如NSString、NSDate、NSScanner、UIApplication、UIButton


不关联class的protocol

  • 大多数protocol聚集了一堆相关方法,并不关联class

  • 这种protocol使用ing形式以和class区分开来


Cocoa编码规范

关联class的protocol

  • 一些protoco聚集了一堆无关方法,并试图与某个class关联在一起,由这个class来主导

    • 这种protocol与class同名

      • 如NSObject protocol


5.头文件

头文件的命名极其重要,因为它可以指出头文件包含的内容:

  • 声明一个孤立的class或protocol

    • 将声明放入单独的文件

    • 使头文件名与声明的class/protocol相同

Cocoa编码规范

  • 声明关联的class或protocol

    • 将关联的声明(class/category/protocol)放入同一个头文件

    • 头文件名与主要的class/category/protocol相同

Cocoa编码规范

  • Framework头文件

    • 每个framework都应该有一个同名头文件

    • Include了框架内其他所有头文件

Cocoa编码规范

  • 添加API到另一个framework

    • 如果要在一个framework中为另一个framework的class catetgory添加方法,加上单词“Additions”

      • 如Application Kit的NSBundleAdditions.h 文件

  • 关联的函数、数据类型

    • 如果你有一组关联的函数、常量、结构体或其他数据类型,将它们放到一个名字合适的头文件中

      • 如Application Kit的NSGraphics.h


二、方法


1.通用原则

  • 以小写字母开始,之后单词的首字母大写

    • 以众所周知的缩写开始可以大写,如TIFF、PDF

    • 私有方法可以加前缀

  • 如果方法代表对象接收的动作,以动词开始

    • 不要使用 do 或 does 作为名字的一部分,因为助动词在这里很少有实际意义

    • 同样的,也别在动词之前使用副词和形容词


- (void)invokeWithTarget:(id)target;

- (void)selectTabViewItem:(NSTabViewItem *)tabViewItem


  • 如果方法返回接收者的属性,以 接收者 + 接收的属性 命名

    • 除非间接返回多个值,否则不要使用 get 单词(为了与accessor methods区分)


Cocoa编码规范

在所有参数之前使用关键字

Cocoa编码规范

确保参数之前的关键字充分描述了参数

Cocoa编码规范

创建自定义 init 方法时,记得指明关联的元素

Cocoa编码规范

不要使用 and 来连接作为接收者属性的关键字

  • 虽然下面的例子使用 and 看似不错,但是一旦参数非常多时就容易出现问题


Cocoa编码规范

除非方法描述了两个独立的操作,才使用 and 来连接它们

Cocoa编码规范


2.getter和setter方法(Accessor Methods)

如果property表示为名词,格式如下


- (type)noun;

- (void)setNoun:(type)aNoun;

- (BOOL)isAdjective;

- (NSString *)title;

- (void)setTitle:(NSString *)aTitle;


如果property表示为形容词,格式如下


- (BOOL)isAdjective;

- (void)setAdjective:(BOOL)flag;

- (BOOL)isEditable;

- (void)setEditable:(BOOL)flag;


如果property表示为动词,格式如下(动词用一般现在时)


- (BOOL)verbObject;

- (void)setVerbObject:(BOOL)flag;

- (BOOL)showsAlpha;

- (void)setShowsAlpha:(BOOL)flag;


Cocoa编码规范

你可能使用情态动词(can、should、will等)来增加可读性,不过不要使用 do或 does

Cocoa编码规范

只有方法需要间接返回多个值的情况下才使用 get

像这种接收多个参数的方法应该能够传入nil,因为调用者未必对每个参数都感兴趣

Cocoa编码规范

3.Delegate方法

以发送消息的对象开始

省略了前缀的类名和首字母小写

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

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;


以发送消息的对象开始的规则不适用下列两种情况

只有一个sender参数的方法

(c)2006-2024 SYSTEM All Rights Reserved IT常识