1.你用分类做了哪些事情?
声明私有方法 分解体积庞大的类 把framework私有方法公开化
2.分类的特点?
运行时决议(扩展是编译) 可以为系统类添加分类 分类添加的方法可以“覆盖”原类方法
3.分类可以添加哪些内容?
实例方法 类方法 协议 属性(get方法set方法 添加实例变量需要通过关联技术)
4.分类结构体
5.分类加载调用栈
_objc_init --(map-2-images --- map_images_nolock (内存镜像处理))--- -read_images(读取镜像) --- remethodizeClass
6.关联对象
7.关联对象的本质:(并不是在宿主类上面)
关联对象由AssociationsManager管理并在AssociationsHashMap存储,所有对象的管理内容都在同一个全局容器中
8.一般用扩展做什么?
声音私有属性 声明私有方法 声明私有成员变量
特点:编译时决议 只以声明的形式存在,多数情况下寄生于宿主类的.m中,不能为系统类添加扩展
9.如何实现通知机制
10.KVO
key-value-observing 观察者设计模式的另外一种实现 isa(isa-swizzling)混写来实现KVO
手动kvo:willchangevalueforkey _value +=1 didchangevalueforkey (系统也是这么实现的)
11.kvc (key-value coding 键值编码技术)
-(id)valueforkey:(nsstring *)key -(void)setValue:(id)value forkey:(nsstring *)key
key是相似值(比如:_key _isKey key isKey) 访问器方法也是相似(比如:getKey key isKey) 实现逻辑如下:
12.copy
只有copy修饰不可变对象的时候是浅拷贝,其它都是深拷贝