个人觉得这本书很不错!里面有很多很实用但以前没有太注意的地方,所以想纪录下来,当作自己的读书笔记吧。
- 熟悉Objective-C
1)Objective-C语言使用“消息结构”而不是“函数调用”。Objective-C语言是由Smalltalk演化而来,其中Smalltalk是消息型语言的鼻祖。消息于函数调用之间的关键区别在于:使用消息结构的语言,其运行时所执行的代码是由运行环境来决定的;而使用函数调用的语言,则由编译器决定。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象的类型。接收一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。
Objective-C是C的超集,所以C语言中的所有功能在编写Objective-C代码时依然适用。
Objective-C语言中的指针是用来指示对象的。对象所占用内存总是分配在“堆空间”中,而绝不会分配在“栈”上。不能在栈中分配Objective-C对象。分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其栈帧弹出时自动清理。
2)在类的头文件中尽量少引用其他头文件
@class EOCEmployer,叫着“向前声明”该类。向前声明也解决了两个类互相引用的问题。
将引入头文件的时机尽量往后延,只有确定需要的时候才引入,这样就可以减少类的使用者头文件的数量。引入的头文件越多,那么就会增加编译时间。
当两个文件互相引用各自的头文件时,使用#include指令会导致是循环,使用#import指令不会导致死循环,但是却无法正确的通过编译器。
向前声明只是告诉编译器,有某个类或者协议,但是却不告诉编译器,这个类或者协议中有什么。
除非必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
有时是无法使用向前声明的,比如要声明某个类遵循一项协议。在这种情况下,尽量把该类遵循的某协议的声明移动至class-continuation分类中。
3)多使用字面量语法,少用与之等价的方法
推荐下面的一些做法:
NSNumber *someNumber = @1;
NSArray *animals = @[@"cat", @"dog"];
NSDictionary *dict = @{@"firstName" : @"Matt", @"lastName" : @"Galloway"};
对于数组和字典这样的定义方式需要注意:这些元素中一旦有nil,便会抛出异常。
字面量的语法有个小小的局限性:就是除了字符串以外,所创建出来的对象要必须属于Foundation框架才行。
使用字面语法创建出来的字符串、字典、数组都是不可变的对象。若想变成可变版本,那么需要再复制一份。
NSMutableArray *mutable = [@[@1, @2] mutableCopy];
这样做会多调用一个方法,而且还要再创建一个对象。
4)多用类型常量,少用#define预处理指令