当前位置:网站首页 > 技术博客 > 正文

swift最新学习



一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情。

  • 本文主要介绍RxSwift中KVO的使用,和原理的分析

对于kvo在oc中我们通过键值观察进行监测对象属性的变化,通过3步曲进行监听。

  • 相当于我们实时监测某一个关心的值,基于这个值的的,当调用这个值告诉观察者,这个值要改变了,不用的时候移除观察。
  • kvo内部实现是通过一个去操作,中间类的setter主要是,方法,实际去改变。这样设计相当于一个中间类当成一个管家,外面只要吩咐一下,具体执行交给管家,。
  • kvo主要是,把实例对象的isa由中间类还原到,中间类,方便下次关联。
    关于kvo的原理可以看下我之前的文章: kvo原理探索 那么对于swift怎么实现kvo呢?




类似我们oc的方式,添加,观察,移除。

 
  

打印结果 image.png

基本上来说swift还是对oc的进行封装,对象属性修饰为了具有oc中的运行时能力

swift对kvo进行了封装方便我们可以快发开发

 
  

这里我们把整个对象当成一个,通过动态的访问它的路径下,找到它发生变化的闭包回调从而达到监听的效果,同时不用我们手动管理它的观察者。

image.png

RxSwift对kvo也进行了封装,我们使用也是比较简单

 
  

我们也可以使用

 
  

打印结果

image.png

image.png 通过官方的描述可以知道只是对的简单的包装,生成一个的序列
可以观察我们对象属性的路径,包括和 路径,否则你可能会因为在之前没有注销KVO观察者而导致系统崩溃



image.png 我们观察Person里的book,设置为弱引用的话会造成崩溃。

对于我们看下创建

image.png

它可以在可以使用的,由于它不会保留被观察目标,因此可以用于观察所有权关系未知的任意对象图 它可以用来观察属性

2.1.1 KVOObservable

image.png

对于遵循了序列的协议因此可以,其次遵循了,该协议定义了,从而让遵循的类可以,避免了重新定义一个类或者继承的关系。

image.png

我们继续看上面的初始化,首先对于就是我们,在闭包中为了这里使用(相比弱引用,明确了它的生命周期和持有者的一致性)进行判读是否强持有 对于我们是传的yes

image.png

对于我们的进入方法

image.png

2.1.2 observeWeakly 初始化流程

我们看下的初始化

image.png

首先对 进行处理之后 创建一个序列后调用

image.png

当我们观察的对象正在销毁时候,产生一个,就不会引用了。继续看下对于我们观察对象是的时候是如何处理的

image.png

通过获取的属性,进行判断没有属性的话则产生一个,否则判断是否存在修饰的属性

image.png 通过判断属性的符号是否含有

之后继续创建一个的序列。

image.png

之后我们的序列后调用这个序列的闭包,进行一些处理。

我们创建了一个序列包含了我们的一些信息包括等。我们继续看下如何订阅的和发送的

我们看下序列自己实现的

image.png

创建我们的观察者,的回调,发送信息

image.png

观察者继承是oc类实现的,可以发现还是实现了我们

image.png

当我们值发生改变的时候调用就会调外面的进行发送,判断我们的是否有值,发送到的回调。

  • dispose 关于我们移除观察者可以发现在调用的时候会移除我们观察者。

对于和使用场景基本上一样,只是会添加一些判断,比如对象是否在销毁等,生成一些空的序列,或者错误序列。通过对的封装产生一个,进行发送序列,回调,销毁。

版权声明


相关文章:

  • vmware虚拟机版本不兼容2026-04-08 21:01:02
  • html登陆页面密码加密2026-04-08 21:01:02
  • arm ipi2026-04-08 21:01:02
  • rx fifo overrun2026-04-08 21:01:02
  • ir2110引脚图2026-04-08 21:01:02
  • microsoft visual c++ 2005 sp12026-04-08 21:01:02
  • 舅娘的电脑课2026-04-08 21:01:02
  • redis和缓存的区别2026-04-08 21:01:02
  • linux 比较文件大小2026-04-08 21:01:02
  • STM32 SPI接收中断2026-04-08 21:01:02