00:00
来,我们首先要做的第一件事呢,是需要去画图。嗯,来打开啊。来,我们需要去画这样一个类似的原理图,好,来看一下啊。来说一下MV里面如何实现啊。一上来首先我们我们的编码首先一上来需要去创建一个最外层的实例,对吧?啊,利用一个MVM,这个应该是能知道的。MVVM。而他的内部啊,去做了哪几个重要的事了,数据代理就不用去再去拼命讲了啊,那只是一个基础。
01:00
最重要的是这两条语句。对吧,那这条语句里面去创建水句。我不知吧,对吧,创建的是我不知。用两个方向啊。啊,一个是是先创建了它。嗯,好像不对,没有啊。好吧,这个嗯,好。是这样的一个这样的一个意思,那创建我不知道我是干嘛去的了。是需要做什么事情,是不是对我们date中的属性进行什么截词,或者叫截词date中所有属性,对吧,或者叫监视也行,是一个意思,其实。它的重力作用是叫介词,嗯。解实或者叫坚s date中所有哦层次的属性,哎,这里面强调一个所有层次的属性。
02:11
这个应该没问题是吧,好。那啊要结石是不是要对应的一个set方法吧,它同时为每一个属性都创建了一个另外一个对象,是不是有一个地保啊,创建了另外一个对应的对象来D。啊,有个东西叫deep,好,这个deep呢,我们强调一下与随意对应啊,不是啊,与什么date属性啊中啊date属性吧。对中的属性一一对应对吧,啊一一对应。没问题啊。这个字啊,就这样吧。
03:03
好。来啊,这是这一个,嗯,下面我们要画下面的啊,下面下面它同时创建了另外一个对象。叫什么?嗯。是不是编译对象啊compare,好把它呢来画一下。好,那创建它是用来干嘛的呢啊,所以它有两个方面,一个方面是它最重要的一个功能之一,就是解析编译啊,或者叫编译解析都是一个意思啊。解析谁啊指令或者是什么大炮表的是对吧。
04:02
这个能不能弄啊,或者叫解析指定属性也行啊,这个没关系啊。这两分钟好,那解析指令属性的大块表的是目的是什么呢?得到一个什么结果呢?啊,是不是去更新显示界面呢,或者应该叫显示界面对吧,其实它这里面啊,就有一个概念叫初始化视图对吧。啊,初始化视图,那调用谁去初始化视图呢?哎,有另外一个东西叫什么our data。啊,叫update。Update里面是不是很多更新某一个节点的一些方法呀,嗯。
05:01
那也就是说这一条线其实实现了界面的初始化显示,他在去编译解析指令或者大化表达式的时候,除了显示视图,初始化视图还做了一件事情,就围着一个表达式会创建一个什么对应的water。嗯,就这吧。这东西叫什么?有没有好来?这里面要有一个线。OK,一个箭头吧。这里面是干嘛呢?嗯,为表达式。创建对应的water对吧,这个创建water里面是不是指定了更新的函数。
06:00
能不懂啊,OK,指令。更新的函数。这个能懂吧,好。啊。大家创建what的内部啊,做了个什么事?现在deep又有了,我有了,是不是要建立关系?就是这样一个事情,他会啊,其实这个建立关系最最重要的是这一个把watch搞到哪个里面去,Deep里面去,其实把deep弄到我里面呢,只是为了一个判断而已,那个不是最关键的,也就说那个东西你说不说,其实并不算特别重要,你能说那当然好。但那个跟当当前这个我来比来说应该更好一些,这个叫什么。叫。他如果用比较专业的术语叫添加订阅者能懂不啊,比较专业术语添加订阅的添加啊订阅者来说一下这个什么意思啊,谁是订阅者。
07:12
我想。一个我我订阅者相当于一个订阅者,当于是不是搞一个监听了,能不懂就指定了一个回调函数嘛,而那个回调函数干嘛去了,最终是不是更新界面去的啊,添加地面者就相当于是建立啊water到deep的一个关系啊到deep的一个关系好了来。那也就是说我的这个地里面应该是不是有一个容器来存我。叫什么呢?叫SS。啊。沙宝就相当于订阅者的意思。S就是多个。这不懂啊,它呢就是用来去保存,嗯,多个N个我写的数组对吧。
08:05
的容器啊,数字容器吧。这个能懂吗?啊,要能懂啊好。没问题啊,OK。好,那其实到此为止啊,到此为止初始化的过程就完了,但其实我们有个线还没画是吧,没画什么样,就是因为它是发生在。更新阶段。我们现在画的线都是发生在什么初始化的阶段啊,那个将deep添加里面我就不再说了啊好。那更新阶段从哪起始呢?来换个颜色啊,换个颜色。这里面我们会去做一件事情啊,比如说我们会写一句话啊,VM点,比如说name吧,等于啊,比如说等于烫是不是哪一个是吧,那这一句话啊,会导致先相当于通知谁了,通知of observe里面的什么方法是不是that。
09:11
对吧,导致observe set调动,而他会去告诉谁了?是不是通知deep?听不懂啊,通知deep,而deep他会去通知谁了,What?对吧?通知所有的watch,而我收到信息后去调用谁回调函数去干嘛?去调用update去干嘛?更新界面。其实你下线更新的时候其实就很清晰了,对吧,就没什么了。啊,这一个叫通知变化是吧,通知什么变化了,是不是数据变化了,对吧,而这个通知变化先告诉deep deep再去告诉通知所有相关的。
10:06
Watch。这个能不懂啊,OK,每一个收到通知以后就会调用update去干嘛。更新视图,也就是更新界面呗。没问题吧,啊,就是这样一个情况啊。大家跟那个面试官画这些图的时候,一定要是有层次的啊,就是你先分为两个部分,一个初始化我做了什么对吧,那个更新我做了什么,一定要说明开来,我会从两个方面跟你去说。对吧,那接着啊去说,哎,这个过程中创建了两个啊实例,一个是observer,一个是卡票,Observe呢是用来实现对数据的劫持,或者叫监视。
11:02
就最终实现数据绑定的,而这里面依赖于谁呢?地对吧?啊要创建对应的地,其实在初始化的时候,这根线有吗?没有。对吧,没有这根线啊,接着创建compare compare其实有两个要做的事情,一个要实现初始化视图的一个操作。要初始化视图,是不是解析指令和大跨表是吧?另外一个操作叫创建对应的什么water,创建water是不是为了后面来去更新视图的呀。啊,OK,而创建water内部需要去建立deep与water之间的什么关系?最最重要的是将water添加到对应的deep里面去。那它一定对应一个地吗?不一定,那什么时候它会对应多个地呢?一个对应多个地方。
12:02
啊,是不是一个多层的表达式啊,也就是说多层表达什么意思,我就两个属性嘛,假设两个或者三个对吧。这个时候是不是等于三个属性,一个属性就是一个地滑板。对不对。啊,前面的事情做好以后,后面就是说我更新数据。最终我的界面。是如何变化的?啊,这个时候啊,就是我更新了VM里面的数据,实际上导致水里面的数据变化。Date中的数据变化了,对吧,而date的属性是不是有set监视对不对?有set监视里面它会去通知它对应的什么地步。那我问大家,我改变一个数据在方法调用,是通知一个还是有可能通知多个?
13:01
几个,比如说我把那个类目改了嘛,就这个有没有可能通知多个。啊,不可能,因为为什么呢?因为前面我们说过,这个deep跟那个前面刚跟date中的属性什么一一对应。而现在我是更新里面的某一个属性吧。我强调是我更新一个属性,它只会去通知一个地,而这个地可能会关联什么N个,我想。对吧,啊,关N个我好,那我问你了,一个地如何关联N个我起来。啊,这个属性在模板里面被什么多次使用啊,对吧,这样他就会通知多个窝角,至于到底通知多少个,什么时候确定呢。是不是初始化的时候确定的啊,或者说要解析模板的时候确定的对不对,嗯。
14:02
最后就调用update的方法进行更新就可以了。嗯,这就是他的一个整体的一个结构图。
我来说两句