logo头像

小玉的技术博客

iOS面试题

一个NSObject对象占用多少内存

系统分配了16个字节给NSObject对象
但NSObject对象内部只使用了8个字节的空间(64bit环境下)

对象的isa指针指向哪里

instance对象的isa指向class
当调用对象方法时,通过instance对象的isa找到class 对象,最后找到对象方法的实现进行调用
class 的isa指向meta-class
当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用
meta-class的isa指向基类的meta-class对象

OC的类信息存放在哪里

对象方法、属性、成员变量、协议信息,存放在class对象中
类方法,存放在meta-class对象中
成员变量的具体值,存放在instance对象中

iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么)

利用runtimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类
当修改instance对象的属性时,会调用Foundation的_NSSetXXXXValueAndNotify函数
willChangeValueForKey:
父类原来的setter方法
didChangeValueForKey:
内部会触发监听器(Observer)的监听方法(oberserveValueForKeyPath:ofObject:change:context:)

如何手动触发KVO

手动调用willChangeValueForKey和didChangeValueForKey

直接修改成员变量会触发KVO吗

不会

通过KVC修改属性的值,会触发KVO吗

支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励