分类(category)

分类能够干啥:
- 声明私有方法
- 分解体积庞大的类文件
- 拓展Framework的方法
分类中可以添加哪些内容?
- 实例方法
- 类方法
- 协议
- 属性(get set方法, 非实例变量)
- 关联对象(伪成员变量)


特点:
- 运行时决议
- 分类方法会覆盖原类方法
- 同名分类方法谁能生效取决于编译顺序
- 名字相同的分类会引起编译报错
扩展(extension)
特点
- 编译时决议
- 只以声明的形式存在, 多数情况寄生于宿主类的.m中
- 不能为系统类添加扩展
代理 (delegate)
- 一种软件设计模式
- iOS中以@protocol形式体现
- 一对一
- 一般声明为weak以规避循环引用
通知 (Notification)
- 使用观察者模式来实现的用于跨层传递消息的机制
- 传递方式一对多
KVO
- 是观察者设计模式的又一实现
- Apple使用了isa混写(isa-swizzling)来实现KVO
- 使用setter方法改变值KVO才会生效
- 使用setValue:forKey:改变值KVO才会生效
- 成员变量直接修改需要手动添加KVO(基于KVC)才会生效

KVO
- get

- set

属性关键字
读写权限
- readonly
- readwrite
原子性
- atomic
- nonatomic
引用计数
- retain/strong
- assign/unsafe_unretained
- weak
- copy
assign特性
- 修饰基本数据类型
- 修饰对象类型时, 不改变引用计数
- 会产生悬垂指针
weak特性
- 不改变修饰对象的引用计数
- 所指对象被释放后会自动置为nil
copy特性
浅拷贝: 引用计数+1
深拷贝: 开辟了新的内存空间