Effective Objective-C 2.0 学习笔记
1.objective-c 是消息结构语言, 并非函数调用语言
二者的区别在于。
消息结构语言,其运行时所应执行的代码有其运行时决定。
使用动态绑定的消息结构,只有在运行时才会检查对象的类型。
函数调用语言,有编译器决定。
2、在类的头文件中尽量少应用其他头文件。
在.h中如果不需要详细接口信息,尽量使用@class 类名,这种向前声明的方式。
可以大量减少编译时间,和两个类之间相互引用的问题,降低彼此的依赖度。
如果是继承某个类,或者遵循某个类的协议就必须导入完整的头文件。
3.多用字面量语法创建字符
用字面量语法创建数组或字典时,若有nil 则会抛出异常,务必确保值里面不含nil
4.多用常量类型,少用#define预处理指令
#define 会将后面遇到的所有替换。切不能显示数据类型。
static const数据类型常量明等同于#define(只在编译单元内可见)
全局符号表
extern NSString *const name;
5、用枚举类型表示状态。选项。状态码;
消息传递: 在对象之间传递数据并执行任务的过程、
runtime 程序运行起来后提供相关支持的代码叫运行时环境,它提供了
使得对象之间能后传递消息的重要函数。并且包含了创建的全部逻辑。
6属性
assign针对纯量类型进行简单的复制操作(CGFolat NSInteger)
strong 定义了一种拥有关系,,为这种属性赋值时,会先保留新值,并释放旧值,在将新值添加上去。
week 定义了一种非拥有关系,为这种属性复制是, 既不保留新值,也不释放旧值。此特质与assgin 类似。
但是,在属性所指的对象销毁时,属性值也会被清空。
unsafe_unretained 语义和assign相同,但他适用于” 对象类型”,表达一种非拥有关系,不保留。
当目标对象遭到摧毁时,属性值不会自动清空。
7在对象内部尽量直接访问实例变量
写入数据时,应该通过属性去写
在初始化方法和dealloc 方法中,总是应该直接通过实例变量来读取数据