[关闭]
@MicroCai 2016-05-20T12:11:05.000000Z 字数 2729 阅读 10387

Effective Objective-C Notes:Objective-C命名规范

Archives iOS


《Effective Objective-C Notes》系列博文整理自《Effective Objective-C 2.0》


命名是 Objective-C 编程的重要环节。其他语言的开发者刚接触 iOS 时,可能会奇怪 Objective-C 为何会使用如此冗长啰嗦的方法、变量、类的命名方式,其实这里头确实有文章。

命名规范的来源

Objective-C 形成这种命名方式的主要原因有两个:

  • 为了代码更好的可读性;
  • 防止命名冲突;

Objective-C 的命名通常都比较长,名称遵循驼峰式命名法,而且名字中一般都带有 inforbywith 等介词,读起来像句子一样,非常易于理解。通常一个命名较好的代码,就能够做到在开发者一看到名字时,就懂得它的含义和使用方法。

举个栗子,下面是 NSString 的一个实例方法

  1. - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target
  2. withString:(NSString *)replacement

方法是这样调用的

  1. [stringValue stringByReplacingOccurrencesOfString:@"sourceString"
  2. withString:@"destinationString"]

我们可以将上面的方法调用变成下面的这样一句简单的英文(请暂时忽略英文语法)

replacing stringValue occurences string sourceString with string destinationString

如此一拆解,方法的含义便明白,这个方法的意思就是

stringValue 字符串的子串 sourceString 替换成 destinationString。第一个参数就是要替换的源字符串,第二个是要替换的目的字符串。

我并没有在文中为 NSString 的这个方法加上注释,仅仅是通过名字就可以知道方法含义、调用方式等等信息,可见 Objective-C 代码命名规范的好处甚多。

需要规范代码命名的另一个非常重要的原因是 Objective-C 没有命名空间(name space),如果不按照较为规范的命名方式,极易产生冲突。导致程序有可能在链接时出现重复符号(duplicate symbol)而无法通过编译,或者直接在运行时崩溃。避免此问题的唯一办法就是为所有名称加上适当前缀,变相实现命名空间。前缀可以是与公司、应用程序或二者相关的关联名称。由于苹果公司保留使用“两字母前缀”的所有权,所以第三方代码的前缀应取三个字母为宜。应用程序中的所有名称包括类名、分类方法名、全局变量名、C 函数名等等,都应该加上前缀。

举个栗子,假设你所在的公司叫做 Effective Widgets,那么就可以将前缀定为EWS,如果在应用程序的有个类名叫 MenuViewController,加上前缀之后,其实际的名字应该命名为 EWSMenuViewController。这么做的好处非常多,不仅大大降低了命名冲突的概率,还能在出问题时,根据栈的回溯信息,立即定位到问题所属的代码模块。

基本命名规范

做了这么多铺垫,就是为了说明 Objective-C 命名的两大原则:1、可读性高;2、加前缀防止命名冲突。Objective-C 的命名基本遵循 驼峰命名法,在名字中除首字母外的每个单词都用大写字母来标记。如果首字母大写,则为大驼峰法;首字母小写,则为小驼峰法。为什么是基本遵循呢?因为前缀的影响,有些名字并不符合驼峰命名法。

给方法命名的规则

类与协议的命名

给私有方法加前缀

常量命名

类别命名


命名规范的内容其实很多,本文仅作为一个引子,希望能引起各位同学对命名规范的重视。和命名规范同样重要的还有代码书写规范,各位童鞋可以直接 Google 搜索 Objective-C Convention,即可找到一些不错的资源。

相关阅读:
[1] Introduction to Coding Guidelines for Cocoa
[2] Cocoa Style for Objective-C
[3] Learn Objective-C: Cocoa Naming Conventions

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注