一、熟悉 Objective-C
第1条、了解语言的起源
Objective-C 是一门消息型语言,使用消息结构,而非函数调用。对于消息结构,调用函数由执行代码后的运行环境决定;对于函数调用,则由编译器决定(除非调用函数是多态,才会在运行时根据虚函数表决定具体执行的函数);
Objective-C 是 C 的超集,对于栈上的局部变量,随栈帧的弹出自动清理,对于堆上的对象,按“引用计数”的方式,由内存直接管理;
第2条、在类的头文件中尽量少引入其他头文件
通过“向前声明”的方式,避免在头文件中引入其他头文件,而是在 .m 文件中引入,将引入头文件的时机尽量延后,只在确定要使用时引入,减少类的使用者所需引入的头文件的数量,减少编译时间;该方式的另一个好处是避免头文件之间循环引用(虽然 #import 也可以保证每个头文件只被引用一次,通过 #ifdef )
#import <Foundation/Foundation.h>
@class EOCEmployer;
@interface EOCPerson: NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
@property (nonatomic, strong) EOCEmployer *employer;
@end
第3条、多用字面量语法,少用与之等价的方法
使用字面量语法,与通过 alloc、init 方法声明变量等价,但可以减少代码长度,使其更为易读;
NSString *someString = @"Effective Objective-C";
NSString *someString = [[NSString alloc] initWithString: xxx];
NSNumber *number = [NSNumber numberWithInt:1];
NSNumber *number = @1;
在声明和使用数组时(以 NSArray 为例),直接声明的字面量语法等价于 arrayWithObjects,取下标访问等价于 objectAtIndex,可以视作系统提供的“语法糖”(计算机语言中与另一套语法完全等价但是开发者使用更加方便的语法);
使用字面量语法更加安全,对于 arrayA,arrayB,若 object2 为 nil,那么 arrayWithObjects 会提前结束(该方法会依次处理各个参数,直到发现 nil 为止),而字面量语法会抛出异常,有助于更快发现错误;
NSArray *arrayA = [NSArray arrayWithObjects: object1, object2, object3, nil];
NSArray