当前位置: 首页 > news >正文

家庭网络如何做网站服务器常用企业网站模板对比

家庭网络如何做网站服务器,常用企业网站模板对比,泉州高端网站建设,石家庄网页设计制作在 iOS 中#xff0c;KVO#xff08;Key-Value Observing#xff09;是一个强大的观察机制#xff0c;它的底层实现相对复杂。KVO 利用 Objective-C 的动态特性#xff0c;为对象的属性提供观察能力。 KVO 的底层实现 1. 动态子类化 当一个对象的属性被添加观察者时KVOKey-Value Observing是一个强大的观察机制它的底层实现相对复杂。KVO 利用 Objective-C 的动态特性为对象的属性提供观察能力。 KVO 的底层实现 1. 动态子类化 当一个对象的属性被添加观察者时KVO 会在运行时动态地创建该对象的子类并重写该属性的 setter 方法。 动态创建子类KVO 会创建一个新的类这个新类是被观察对象的子类通常这个类的名字是 _NSKVOClassName_ClassName 形式。重写 setter 方法在这个动态创建的子类中KVO 会重写被观察属性的 setter 方法。 2. 重写 setter 方法 重写后的 setter 方法在属性值发生变化时会进行以下操作 触发 willChangeValue(forKey:)通知即将发生变化。调用原始 setter 方法通过消息转发机制调用原始的 setter 方法以实际更新属性值。触发 didChangeValue(forKey:)通知变化已经发生触发观察者回调。 3. 动态方法解析 在 KVO 动态创建的子类中使用 method_setImplementation 方法来重写属性的 setter 方法。 void setAge(id self, SEL _cmd, int newAge) {[self willChangeValueForKey:age];struct objc_super superStruct {.receiver self,.super_class class_getSuperclass(object_getClass(self))};((void (*)(struct objc_super *, SEL, int))objc_msgSendSuper)(superStruct, _cmd, newAge);[self didChangeValueForKey:age]; }KVO 的实现细节 以下是一个简单的示例展示了 KVO 的一些底层实现细节 interface Person : NSObject property (nonatomic, assign) int age; endimplementation Person endPerson *person [[Person alloc] init]; NSLog(Original class: %, object_getClass(person)); // 输出原始类[person addObserver:self forKeyPath:age options:NSKeyValueObservingOptionNew context:nil]; NSLog(Class after adding observer: %, object_getClass(person)); // 输出动态子类[person setAge:30]; [person removeObserver:self forKeyPath:age];KVO 的工作流程 添加观察者 调用 addObserver:forKeyPath:options:context: 方法时KVO 会动态创建子类并重写 setter 方法。原始对象的类指针isa 指针被修改为新创建的子类。 触发观察 当属性值发生变化时调用重写后的 setter 方法。先触发 willChangeValueForKey:然后调用原始 setter 方法更新属性值最后触发 didChangeValueForKey:。触发 didChangeValueForKey: 时会通知所有观察者属性值已经改变。 移除观察者 调用 removeObserver:forKeyPath: 方法时KVO 会将类指针恢复为原始类并移除重写的 setter 方法。 注意事项 自动 KVOKVO 默认仅支持通过 setter 方法修改属性值的情况。直接修改实例变量不会触发 KVO。手动触发 KVO如果需要手动触发 KVO可以调用 willChangeValue(forKey:) 和 didChangeValue(forKey:) 方法。 [self willChangeValueForKey:age]; _age newValue; [self didChangeValueForKey:age];总结 KVO 是 iOS 中基于动态特性实现的观察机制通过动态子类化和方法重写实现。当属性值变化时KVO 会通知所有注册的观察者。这一机制使得对象间的通信更加灵活和高效但也需要注意在使用过程中正确添加和移除观察者以避免内存泄漏或崩溃。
http://www.dnsts.com.cn/news/76905.html

相关文章:

  • 网站建设 分类济南高新网站建设
  • 高端网站建设网页设计衣服货源怎么找厂家拿
  • 知识付费网站源码下载如何建立互联网公司网站
  • 专门做酒店网站成都发现6例阳性
  • 网站策划书怎么写一个主机多个网站
  • 做网站改变图片位置wordpress在后台文章自定义表单
  • 张家港手机网站网站关键词如何优化
  • wordpress主题视频站seo收费标准
  • 手机小游戏网站网站备案信息代码
  • 出名的网站有哪些株洲高端网站建设
  • 创建网站平台wordpress腾讯地图插件下载失败
  • 济南网站建设v芯企优互联不错wordpress注册邀请码
  • 济南网站建设联系方式济南美赞网站建设公司
  • 河南如何做网站全国网站设计排名
  • 网站蓝色专业提供网站建设服务公司
  • 芜湖建设网站公司任县网站建设价格信息
  • 芜湖做网站的公司结合七牛云 做视频网站
  • wordpress 点赞功能网络优化行业的发展前景
  • 如何选网站服务器网站引导动画
  • 友点企业网站管理系统忘记密码成安县城乡建设规划局网站
  • 专业提供建站模板的公司房产网站加盟
  • 江苏镇江网站建设装修公司网站模板
  • iis网站的建设北京 公司网站开发
  • 义乌国贸学校网站建设园林景观设计公司招聘
  • 春蕾科技 网站建设网站开发朋友圈
  • 安防公司手机网站网站备案查询不到
  • .net如何建设网站国外网站怎么做推广
  • 哪个网站可以直接做ppt怎么导出wordpress 整个网站
  • 做网站图片显示不来东莞网站建设如何做
  • 做不锈钢的网站带论坛的网站模板下载地址