第15条:用前缀避免命名冲突。
Objective-C没有命名空间(namespace)机制,潜在同名冲突问题,解决办法是所有名称加上有意义第前缀。需要注意的是Apple宣称其保留使用所有“两字母前缀”(two-letter prefix)的权利,所以开发应尽量选用3字母或者以上的前缀。
建议应用程序所有命名都适用前缀,包括类名、分类及其方法、协议、枚举、常量、宏等等。
第16条:设计指定的初始化方法。
为Objective-C类设计指定的初始化方法,并指明其他初始化方法均调用此方法,可统一类的初始化。
第17条:实现description方法。
实现description方法返回字符串描述实例,有利于调试。若想打印更详细的调试信息,则可以实现degbugDescription。
第18条:类对象尽量使用不可变的内容。
类的属性如果只能在内部修改,通常使用只读属性,避免使用者修改。
第19条:使用清晰的命名方式。
遵从标准的Objective-C命名规范,名称中一般带有in、for、with等等,虽然像语句一样比较长,但是创建出来的接口更容易理解。
类族命名应该协调一致,遵循命名惯例,利于程序模块划分。
第20条:考虑为私有方法增加前缀。
通常建议为私有方法加上前缀区于公开方法,是常用的接口设计手段,除非情况特殊或者有特定的规范。尽量不要使用单一下划线作为私有方法前缀,因为是预留给苹果公司用的。
第21条:理解Objective-C错误模型.
Objective-C在发生严重错误(fatal error)的时候,可通过@throw抛出NSException异常,应用程序将退出。出现其他不那么严重的错误(nonfatal error)时,通常使用NSError。
NSError封装了3条信息:
Error domain,错误范围。
Error code,错误码,通常采用enum定义。
User info,用户信息,包含错误的额外信息,如描述或者相关的其他错误。
第22条:理解NSCopying协议。
Objective-C通过copy方法拷贝对象数据,需要实现NSCopying协议方法:
- (id)copyWithZone:(NSZone *)zone
NSZone表示内存分成的区,旧程序的对象会创建在区里,当前应用程序则只有一个默认区(default zone)。拷贝对象申请内存通常使用allocWithZone。
通过mutableCopy方法拷贝对象数据,则需要实现NSMutableCopying协议方法:
- (id)mutableCopyWithZone:(NSZone *)zone
一般情况使用浅拷贝(shallow copy),仅拷贝容器内对象自身。
特殊情况可用深拷贝(deep copy),拷贝容器内对象自身同时,复制其中数据。