)dealloc{ [self.person removeObserver:self forKeyPath:@"nickName"]; } 使用需要及时进行合法销毁; 3、KVO原理 3.1 isa-swizzling 这个类,这就是isa-swizzling。
KVO KVO是key-value observing的缩写 KVO 是Objective-C对观察者模式的又一实现 Apple使用的isa混写(isa-swizzling)来实现KVO 面试题来袭! ** 答:使用了isa混写技术(isa-swizzling) ** 3. 接着2追问,什么是isa-swizzling? 人工智能翻译:使用称为isa-swizzling的技术实现自动键值观察...当观察者注册对象的属性时,观察对象的isa指针被修改,指向中间类而不是真正的类,让开发者只关心他需要关心的类(那些他自己创建出来的类
答案是通过 isa 混写(isa-swizzling)。 23、若一个类有实例变量NSString *_foo,调用setValue:forKey:时,可以以foo还是_foo作为key? 都可以。 最后通过isa 混写(isa-swizzling)把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例 答案是通过 isa 混写(isa-swizzling)。 KVO 在实现中通过isa 混写(isa-swizzling)把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例 然而 KVO 在实现中使用了isa 混写( isa-swizzling),这个的确不是很容易发现:Apple 还重写、覆盖了-class方法并返回原来的类。
KVO底层封装了KVC, KVC最重要的原理就是isa-swizzling ,我们在利用KVO的时候就传入了观察者,对象,以及观察的属性.我们在底层就通过对象的方法名得到环境参数,isa结合环境参数直接得出方法接口
NSLog(@"%@",change); } 3.当观察者不需要监听时 [person removeObserver:self forKeyPath:@"name"]; 实现原理 KVO是通过isa-swizzling
不只可以通过 swizzling 来改变,甚至可以用 isa-swizzling 修改对象继承关系,可以在面向对象基础上实现自定义派发 确定:速度最慢 ---- 2.派发类型识别 2.1 Struct
不只可以通过 swizzling 来改变,甚至可以用 isa-swizzling 修改对象继承关系,可以在面向对象基础上实现自定义派发 确定:速度最慢 ---- 2.派发类型识别 2.1 Struct
KVO运用了一个isa-swizzling的机制,runtime还有一个method-swizzling的机制,称为’黑魔法’。 简单而言:实例对象在被观察时,生成派生类,派生类在setter方法中valuewillchange方法和valuesdidchanged方法里发出通知,并且通过isa-swizzling,从而使实例对象成为派生类的对象
; // 2,动态生成子类 Class newClass = [self createChildClassWithKeyPath:keyPath]; // 3,修改isa指向(isa-swizzling setter中做两件事情:①将setter消息转发到父类,调用父类的setter;②通过遍历对照keypath,找到当前变化的所有监听者,并给这些监听者发送一个监听到变化的消息,使之在外界对变化进行响应 3,isa-swizzling ; // 2,动态生成子类 Class newClass = [self createChildClassWithKeyPath:keyPath]; // 3,修改isa指向(isa-swizzling
KVO在Apple中的API文档如下: Automatic key-value observing is implemented using a technique called isa-swizzling KVO深入原理: 1.Apple 使用了 isa 混写(isa-swizzling)来实现 KVO 。
三、Runtime 可以说是中级以及以上工程师的必备技术要求,面试官往往会考察大家对对象、类对象、原类对象的理解、消息传递机制、消息转发流程、Method-Swizzling、ISA-swizzling
- 使用了isa混写(isa-swizzling),当一个对象(假设是person对象,person的类是MYPerson)的属性值(假设person的age)发生改变时,系统会自动生成一个类,继承自MYPerson
引用网络一个图说明其流程: kvo实现原理.png 使用isa-swizzling技术 ,改变对象所属的类。
以上是苹果官方对KVO实现的解释,只说明了KVO是使用isa-swizzling技术来实现的,并没有做过多介绍。 5.1 isa-swizzling 苹果使用了isa混写技术(isa-swizzling)来实现KVO。
关于isa指针、isa-swizzling本博客都有详细介绍,有兴趣的读者可以自行查阅: iOS runtime探究(一): 从runtime开始理解面向对象的类到面向过程的结构体 KVO的实现使用了isa-swizzling
简单概述下 KVO 的实现: KVO 是通过 isa-swizzling 技术实现的,当你观察一个对象时,一个新的类会动态被创建。
五、KVO声明原理 自动键值观察是使用称为isa-swizzling的技术实现的。 顾名思义,isa指针指向维护调度表的对象的类。 这个调度表本质上包含指向类实现的方法的指针,以及其他数据。
有几个要点我这边概括一下: KVO键值观测的实现使用了一种被称为 isa-swizzling的技术 我们知道,isa指针会指向其对应的类对象的内存地址。
因为KVO的实现机理就是将被观察对象的isa指针指向一个中间类而不是真实的类,这是一种叫做 isa-swizzling 的技术,详见官方文档的这句段说明 Key-Value Observing Implementation
因为KVO的实现机理就是将被观察对象的isa指针指向一个中间类而不是真实的类,这是一种叫做 isa-swizzling 的技术,详见官方文档的这句段说明 Key-Value Observing Implementation