前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS_KVO的实现

iOS_KVO的实现

作者头像
mikimo
发布2022-07-20 13:52:39
1720
发布2022-07-20 13:52:39
举报
文章被收录于专栏:iOS开发~

当使用KVO观察一个对象时,runtime会动态创建其子类,并将这个对象的isa指针指向子类;

子类会重写setter方法,内部会顺序调用 willChangeValueForKey 、原来的setter方法、 didChangeValueForKey (内部会调用监听器的回调方法:observerValueForKeyPath:ofObject:context)

- ( void ) setName :( NSString *)newName{

  [ self willChangeValueForKey : @"name" ];

  [ super setValue :newName forKey : @"name" ];

  [ self didChangeValueForKey : @"name" ];

}

系统为了隐藏子类,会重写子类的class方法,直接返回父类

- ( Class ) class {

// 得到类对象,在找到类对象父类

return class_getSuperclass ( object_getClass ( self ));

}

  • 是怎么实现只对当前实例有效的?

当前对象的 isa指针->原类  改为 -> 派生类

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档