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

公司网站做二维码网址网络营销有哪些推广方式

公司网站做二维码网址,网络营销有哪些推广方式,做模型找三视图那些网站,iH5做网站在 iOS 中,KVO(Key-Value Observing)是一个强大的观察机制,它的底层实现相对复杂。KVO 利用 Objective-C 的动态特性,为对象的属性提供观察能力。 KVO 的底层实现 1. 动态子类化 当一个对象的属性被添加观察者时&am…

在 iOS 中,KVO(Key-Value Observing)是一个强大的观察机制,它的底层实现相对复杂。KVO 利用 Objective-C 的动态特性,为对象的属性提供观察能力。

KVO 的底层实现

1. 动态子类化

当一个对象的属性被添加观察者时,KVO 会在运行时动态地创建该对象的子类,并重写该属性的 setter 方法。

  1. 动态创建子类:KVO 会创建一个新的类,这个新类是被观察对象的子类,通常这个类的名字是 _NSKVOClassName_ClassName 形式。
  2. 重写 setter 方法:在这个动态创建的子类中,KVO 会重写被观察属性的 setter 方法。

2. 重写 setter 方法

重写后的 setter 方法在属性值发生变化时,会进行以下操作:

  1. 触发 willChangeValue(forKey:):通知即将发生变化。
  2. 调用原始 setter 方法:通过消息转发机制调用原始的 setter 方法,以实际更新属性值。
  3. 触发 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;
@end@implementation 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 的工作流程

  1. 添加观察者

    • 调用 addObserver:forKeyPath:options:context: 方法时,KVO 会动态创建子类并重写 setter 方法。
    • 原始对象的类指针(isa 指针)被修改为新创建的子类。
  2. 触发观察

    • 当属性值发生变化时,调用重写后的 setter 方法。
    • 先触发 willChangeValueForKey:,然后调用原始 setter 方法更新属性值,最后触发 didChangeValueForKey:
    • 触发 didChangeValueForKey: 时,会通知所有观察者属性值已经改变。
  3. 移除观察者

    • 调用 removeObserver:forKeyPath: 方法时,KVO 会将类指针恢复为原始类,并移除重写的 setter 方法。

注意事项

  • 自动 KVO:KVO 默认仅支持通过 setter 方法修改属性值的情况。直接修改实例变量不会触发 KVO。
  • 手动触发 KVO:如果需要手动触发 KVO,可以调用 willChangeValue(forKey:)didChangeValue(forKey:) 方法。
[self willChangeValueForKey:@"age"];
_age = newValue;
[self didChangeValueForKey:@"age"];

总结

KVO 是 iOS 中基于动态特性实现的观察机制,通过动态子类化和方法重写实现。当属性值变化时,KVO 会通知所有注册的观察者。这一机制使得对象间的通信更加灵活和高效,但也需要注意在使用过程中正确添加和移除观察者,以避免内存泄漏或崩溃。

http://www.mmbaike.com/news/102616.html

相关文章:

  • 新闻网站开发的相关文献百度站长链接提交
  • 旅游建设投资公司网站自动推广软件免费
  • 新人如何自学做网站企业如何做网络推广
  • 域名有了怎么建网站帮平台做推广怎么赚钱
  • 衡水市网站制作seo综合查询怎么关闭
  • h5创建网站百度云盘资源共享链接群组链接
  • 制作商业网站专业做网站
  • 网站 关键词库免费域名解析
  • 一个企业网站做几个关键词最新消息新闻
  • 湛江做网站seoapple日本网站
  • 网站建设公司北京域名查询 站长查询
  • 类似快手网站开发微信广告投放推广平台
  • 深圳最穷的三个区百度刷seo关键词排名
  • 电子商务学了有用吗网站优化的关键词
  • 深圳场站建设发展有限公司一天赚2000加微信
  • 万网 做网站seo排名培训公司
  • 汕头 做网站持啊传媒企业推广
  • 免费做初中试卷的网站互联网营销策划案
  • 个人介绍微电影网站模板免费下载如何做百度推广
  • 东莞网站推广模式淘宝网络营销方式
  • 电子商务网站网站建设深圳网络推广收费标准
  • 中小型网站建设精英长沙网红奶茶
  • 网站设计 psd数字营销包括哪六种方式
  • 深圳网站关键词推广如何免费搭建自己的网站
  • 网络网站制作技巧百度推广代理商利润
  • 平面设计需要美术功底吗泰安网站seo
  • 六盘水市网站建设如何在网上推广自己
  • 公司 网站建设 简介济南seo
  • 微信商城怎么做seo优化排名教程
  • 企业网站样板制作上海seo排名