NSObject的本质
1.一个NSObject在内存中就是一个结构体
- 分配16个字节的内存,但实际只用了8个字节(成员变量所占内存)
- int类型占4个字节,doule类型,long类型,String类型占8个字节
- 内存对齐,OC对象占的内存最少为16个字节
2.对象的isa指针指向哪里?
- instance对象的isa指针指向class对象
- class对象的isa指针指向元类对象(meta-class)
- 元类对象的isa指针指向基类的meta-class对象
3.OC的类信息存放哪里?
- 对象方法,属性,成员变量,协议信息存放在类(class)对象
- 类方法存放在元类对象(meta-class)
- 成员变量的具体值存放在instance对象中
KVO的本质
- 利用runtimeAPI动态创建一个子类,并且让instance对象的isa指针指向这个子类,当修改instance对象的属性时,会调用Foundation的_NSetXXValueAndNotify函数
- 调用_NSetXXValueAndNotify函数的
willChangeValueForKey
,父类的setter方法
,didChangeValueForKey
,didChangeValueForKey内部会触发(oberser)的监听方法(observeValueForKeyPath:ofObject:change:context
)
网友评论