《Effective Objective-C 2.0》读书笔记
1.Objective-C 语言起源
Objective-C 由 Smalltalk 演化而来。使用“消息结构”,其运行时所应执行的代码由运行环境决定。
Objective-C 的重要工作都由“运行期组件”而非编译器完成。使用 Objective-C 的面向对象特性所需要的全部数据结构和函数都在运行期组件中。运行期组件本质是一种与开发者所编写代码相链接的“动态库”,其代码能把开发者编写的所有程序粘合起来。这样只需要更新运行期组件,即可提高应用程序性能。
1 |
NSString *someString = @"The String"; |
上面的代码声明了一个名为someString的变量,类型是NSString。即此变量为指向NSString的指针。
所有的 Objective-C 对象都必须这样声明,因为*对象所占内存总是分配在“堆空间”,而不是在“栈”上。
不能在栈中分配 Objective-C 对象。
分配在堆中的内存必须直接管理,分配在栈上的用于保存变量的内存则会在栈帧弹出时自动清理。
2.在类的头部尽量少引入其他头文件
除非确有必要,不要轻易引入头文件。
一般来说,应该在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样可以降低类之间的耦合。
无法使用向前声明的时候,尽量将“该类遵循的协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把协议单独放在一个头文件中再将其引入。
3.多用字面量语法
使用字面量语法可以缩减代码长度,使其更为易读。
字面数值
1 |
// 非字面量 |
字面量数组
1 |
// 非字面量 |
用字面量创建数组的时候,若数组元素对象里有nil,则会抛出异常,更为安全