iOS面试题

147 阅读1分钟

1. 一个NSObject对象占用多少内存?

  • 系统分配了16个字节可以通过malloc_size获取得到实际分配的内存大小
  • 实际使用了8个字节,可以通过class_getInstanceSize得到

2.对象的isa指针指向哪里?

  • 实例(instance)对象的isa指向类对象
  • 类对象的isa指向meta-class对象
  • meta-class的isa指向基类的meta-class对象

3.OC的类信息存放在哪里

  • 实例对象存放成员变量的具体值
  • 类对象存放实例方法,属性,成员变量,协议
  • meta-claa对象存放类方法

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

  • 利用runtimeAPI动态生成了一个新的子类NSKVONotifying_class,并让实例对象的isa指向这个新的子类
  • 当成员变量的值发生改变时,会触发Foundation的函数_NSSetxxxValueAndNotify 1.willChangeValue 2.父类的setter方法 3.didChangeValue 4.内部会触发监听器(Observer)的监听方法(observerValueForKeyPath:ofObject:change:context)

5.如何手动触发KVO?

  • 通过手动调用willChangeValue didChangeValue手动触发KVO

6.直接修改成员变量会触发KVO么?

  • 不会

7.通过KVC修改属性会触发KVO么?

8.KVC赋值取值的过程是怎么样的

  • 赋值过程

kvcset.jpg

  • 取值过程

kvcget.jpg