《编写高质量iOS与OS X代码的52个有效方法》1-3
第一条:了解Object-C的来源
解析:
消息传递和函数调用的区别
- 消息传递在运行时才会调用函数体,判断参数,而编译期只判断该函数是否有申明
- 函数调用在编译期就确定函数体及其参数类型
Q:
动态绑定
对象所占内存总是分配在“堆空间”(heap space),不能在栈上分配Object-C对象
堆空间/栈空间原理?有什么影响,什么时候用堆什么时候用栈?
要点:
1. Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应该执行何种代码,由运行期环境而非编译器决定。
2. 理解C语言的核心概念有助于写好Objective-C程序,尤其掌握其内存模型与指针。
第二条:在类的头文件中尽量少引入其他头文件
解析:
@class EOCEmployer 向前声明(forward declaring)
要点:
1. 除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合,并且加快编译。
2. 有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某协议”的声明移至“class-continuation分类”中,如果不行的话,就把协议单独放入一个文件,并将其引入。
第三条:多用字面量方法,少用与之等价的方法
解析:
什么是字面量语法?字面量语法也是一种糖衣语法,让开发者用起来更方便的语法,易读减少出错几率,如下:
NSNumber *number = @2.5f;
与之等价的语法是:
NSNumber *number = [NSNumber numberWithFloat:2.5];
映射性数据结构:字典
字典的字面量语法:
NSDictionary *dic = @{@“number”:value};
等价于
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:value,@"number",nil];;
value为nil时,字面量语法会崩溃,第二种写法不会崩溃,因为它一遇到nil就认为停止了,所以用字面量语法更安全。
局限性:
字面量语法除了除了字符串以外,所创建出来的的对象必须属于Fundation框架才行。如果自定义这些类的子类、则无法用字面量语法创建其对象。自定义字符串是可以用字面量语法,但是要修改编译器的选项才行。
要点:
1. 应该使用字面量语法来创建字符串、数值、数组、字典。与创建此类对象的传统方法相比,这么做更加简明扼要。
2. 应该通过取下标操作来访问数组下标或字典中的键所对应的元素
3. 用字面量语法创建数组或字典时,若值中有nil,则会抛异常。因此务必确保值里不含nil。