-
技巧十二:用前缀避免命名空间冲突
注意:
Apple宣称其保留使用所有两字母前缀的权利,所以用户自定义的前缀应该至少有三个字母
不仅是类名,应用程序中的所有名称都应该加前缀,特别是分类和分类中的方法
在类的实现文件中使用纯C函数或者全局变量要注意,因为在编译好的文件当中,这些名称是要算作顶级符号的“top-level symbol”的,在使用过程中,如果在外部文件定义了同名的函数或者变量,会提示命名冲突。
如果自己开发的库内使用到了第三方库,应该为这个第三方库重命名避免冲突。
-
技巧十三:提供全能初始化方法
在指定的初始化方法中一定要维系超类的调用链条[super init], 重写其他的外部可调用的方法,设置默认值
注意:
如果父类拥有全能初始化方法,那么子类维系超类调用链条的方法应该是父类的全能初始化方法, 但如果方法名不同,那么还需要重写父类全能初始化方法名相同的方法,内部调用子类真实的全能初始化方法
也有一种条件,就是我们不希望父类全能初始化方法能应用于子类,那么直接重写并抛出异常
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"should not do thie" userInfo:nil];
-
技巧十四:实现description方法
-(NSString*)description 返回的字符串为打印信息
-(NSString*)debugDescription 返回的字符串为调试打印信息(po)
-
技巧十五: 方法命名
- 如果方法的返回值是新建的,那么方法的首个字母应该是返回值类型,而且不要写简称
- 应该把表示参数类型的名词放在参数前面
- 如果方法要在当前对象上执行操作,那么就应该包含动词
- BOOL属性应该加is前缀,如果返回值为BOOL,应该根据功能加has或者is前缀
-
技巧十六:类与协议的命名
起名时应遵从标准的OC规范(类名的前缀固定,后缀要体现类型且不能缩写)
言简意赅,读起来跟生活中的用语相近
确保风格与框架相符
-
技巧十七: 给类的私有方法加前缀
注意:
以p_为前缀,_单独下滑线的前缀留给apple
-
技巧十八: 理解OC错误模型
如果抛出异常,那么在作用于末位本来需要释放的对象就不会自动释放了,简单来说,就是引用计数(ARC)不是异常安全的,如果要写出异常安全的代码,可以通过设置编译器的标志来实现,这将引入额外代码,即便不抛出异常时也要运行,打开编译器的标志是-fobjc-arc-excetions
OC现在采用的方法是:只在极其罕见的情况下抛出异常,异常抛出后无需考虑恢复的问题,而且应用程序退出,不需要再编写复杂的“异常安全”的代码。对于不是那么严重的错误(nonfatal error),令方法返回nil、0,或者通过NSError返回错误信息
NSError 通过输出参数 传递回调用者, 传递(**NSError),可以解引用,编译器会编译进自动缓存池
一般通过code来辨别位置
-
技巧十九: NSCopying协议
需要一个类能够实现copy,那么需要遵守NSCopying协议,并且重写一下方法:
-(id)copyWithZone:(NSZone *)zone{
//全能初始化方法
People *copyPeople = [[[self class] allocWithZone:zone] init];
//赋值私有变量(不可变数组不需要深拷贝,可变数组不进行深拷贝就会指向同一片内存区域)
copyPeople->_friends = [_friends mutableCopy];
return copyPeople;
}
网友评论