iOS代码命名规范

虽然说代码风格是个人问题,但是一旦团队项目中充斥着各种各样的个性代码的时候,review就变成了一种痛苦,开发人员也会潜意识的不想去看其他人的代码,鉴于此,整理一个通用的规范还是有必要的,还是那句话,代码是写给人看的。

通用准则

  • 除了一些认可的缩写,其他情况都尽量使用全称,下面列出了常用缩写:
    alloc、alt(alternate)、app、calc、dealloc、func、horiz(horizontal)、info、init、int、max、min、msg、nib、pboard(pasteboard)、rect、rep(representation)、temp、vert(vertical);还有一些常用技术名词缩写如XML、URL这样的
  • 注意保持命名的一致性,最好能够和Cocoa Touch框架的命名保持一致,这个可以参考相关的头文件,作用相同的属性、方法最好能使用相同的命名
  • 使用自定义的前缀(类似Foundation框架用的NS)来命名class、protocol、function、constant、typedef structure
  • 方法使用驼峰命名法,但以小写字母开头;特别是不要以下划线开头来命名方法,这种方式是保留给Apple专用的(下划线开头命名instance variable除外)
  • class的命名应该包含一个能够代表它的名词
  • protocol应该根据它所组织起来的行为来命名;如果protocol内组织的方法不和任意class关联的话,那么可以使用ing形式来命名以避免和某个class的名称混淆,如NSLocking这样;如果protocol和某个class比较相关的话,那可以把这个protocol命名成和这个class一样的名字,如NSObject;
  • 头文件的命名以该文件内最主要的class、protocol、category来命名
  • 每个framework都应该有一个头文件,包含framework的所有public的头文件,然后以framework的名字命名

方法的命名

  • 对于对某个对象实施行为的方法,直接以动词+对象的方式命名,如selectTabViewItem这样
  • 方法描述两种不同的动作,可以用and连接,其他情况尽量不要用and,如openFile: withApplication: andDeactivate
  • 属性存取方法的命名,设置统一使用setXXXX,访问一般为xxx或isXXX;只在需要返回多个值的才使用get开头命名的方法,如getLineDash: count: phase
  • delegate方法的命名一般以消息发送方的类名开头(去掉前缀),如tableView: shouldSelectRow;除非只有一个参数,否则发送方的类名后会加一个冒号隔开,比如myView: didOpen对比myViewCloseWindow:;使用did和will表达已经或将要发生的事件,使用should来表达此事件要求接收方进行一些处理
  • 方法命中不要用pointer或ptr,而是让参数类型去表达这个信息,下面是一些常用的组合形式:
    ...action:(SEL)aSelector ...atIndex:(int)index ...title:(NSString *)aString
    ...target:(id)anObject ...length:(int)numBytes ...intValue:(int)anInt
    ...frame:(NSRect)frameRect ...point:(NSPoint)aPoint ...tag:(int)anInt
    ...font:(NSFont *)fontObject ...content:(NSRect)aRect ...alignment:(int)mode
    ...stringValue:(NSString *)aString ...keyEquivalent:(NSString *)charCode
  • 类的私有方法的命名,为了避免和父类发生冲突,建议采用前缀加下划线的组合,形如KK_xxxxx这样的方式来命名

函数的命名

  • 使用类似class这样的前缀,如NSHighlightRect
  • 一般带动词,但如果是返回第一个参数的一个属性,那可以不要这个动词,如float NSHeight(NSRect aRect)
  • 如果使用引用的方式返回值,那么使用Get作动词,如const char* NSGetSizeAndAlignment(unsigned int* sizep, unsigned int* alignp)
  • 如果返回布尔值,那么应该以受影响者开头,如BOOL NSDecimalIsNotANumber(const NSDecimal* decimal)

数据类型的命名

  • 枚举常量、const变量的命名和函数的命名类似
  • 一般情况下不要用#define来定义常量,一组相关的整数常量可以使用enum定义,float常量用const定义
  • 宏命名全部使用大写,另外双下划线开头的宏是编译器定义的
  • 通知的命名方式:[�关联类名]+[Did | Will]+[�唯一名称]+Notification,如NSApplicationDidBecomeActiveNotification
  • 异常的命名:[前缀]+[唯一名称]+Exception,如NSFontUnavailableException(注意,常规的,可预期的情况返回错误值;想访问不存在的数组下标这类才用异常)

你可能感兴趣的:(iOS代码命名规范)