00:00
大家好,我是上硅谷H学科的讲师张小飞,在程序员节日来临之际,在这里我给大家分享一道面试题,下面我们来看一下。那这个题呢,是一个。怎么说是一个比较拔高的一个题,也是关于view的,是涉及到view源码部分的一个题。需要你去说一说啊,View作为MVM框架的一个实现的一个原理。那我们要说清它,首先我们需要对啊这个view的MMMVM做一个。理解,那view作为一个M2M实现,它里面有两个重要的技术。一个是模板解析,一个是数据绑定,也就是说它通过模板来动态显示数据,它通过数据绑定来实现更新,数据界面就自动变化。
01:00
这个是非常重要的两个技术,对于来说。而模板解析最终它要实现的效果就是实现我们组件界面的初始化显示。而在模板里面有几种语法需要去解析,一个是大跨表达式,再一个就是指令。如果对大家对这两个啊语法不是特别了解,那大家需要先学一下view的一个基本语法。而数据绑定,最终他要去做的就是实现更新显示。那更新显示的实现里面用到一个非常重要的句子技术叫数据劫持。啊。那下面呢,我们来去通过一个原理图啊,来看一下它的一个实现的过程。
02:01
好,那下面我们来把这个图呢给大家去画一画,其实我们写代码首先呢,第一步我们写代码就是创建了一个什么。溜了一个MVVM对吧,其实我们我们写代码的时候做了一件非常简单的事,对吧?哎,6mm内部啊,其实他做了三件事,一定实现数据代理,但数据代理呢,不是我们重点研究东西。那个也比较简单是吧,我们重点研究两个方面,一个是模板解析,一个是数据绑定,对吧?来那他其实创建了两种类型。联想对象一个叫什么observe对吧,一个叫什么compare。
03:00
这个能懂吗?啊,一个是叫compare,好,它们俩的作用呢,是不太一样的啊,不太一样的,那首先是说observer是先创建的啊,Observer是先创contact后创建的,Observer创建是为的是干嘛去的,叫坚视啊,或者叫什么劫持,嗯,对中所有层次的什么属性,对不对,同时还为每一个属性都创建了另外一种对象。叫什么对象,对,叫对吧,那也就是说deep与谁一一对应,与什么date中的属性一一对应,那也就说你有几个属性,我就有什么几个地步。
04:17
是不是做了准备工作啊,这都做了准备工作。没问题吧,好,那接着呢,他去创建,创建了compare,看其实有两个方面的。作用两个方面的事要做,那肯最最重要的是,那肯定是去编译模板了。这个能不能懂啊,编译或者解析模板。编译模板实际上啊,是不是去编译模板两种语法呀,一个是代号表的是,再一个是什吧,呃,再一个就是子逆对不对,这能懂不好,那编译它最最终是为了什么呢?是不是初始化视图。
05:11
对吧,我叫初始化界面或者初始化界面都行啊。啊,最终的最终要想实现初始化界面,需要调用谁的方法来去实现呢?啊是不是有一个对象叫update。这个能懂吧,啊就这样一个对象,这用来去做更新的节点的一个对象。好,那。下面啊,下面说的事情啊,除了干了这件事,同时他还做了什么事?他是不是还创建了另外一种对象,叫what?
06:03
而且还不止创建一个。是不是意思不止一个是N个对不对啊,我那创建我起是创建多少个呢。对吧,跟谁对应呢,对不对,这个需要去知道,这个时候是为每个。表达式创建什么对应的我想。其实同时指定了是不是更新节点的回调函数,这个懂不懂?更新节点的回调函数。这能理解,不,这是准备做了一个准备工作,那合力函现在就掉了吗?没有,还没到时机,对吧?
07:05
这个能不能懂啊,这个地方要注意,但是这个表达式其实有一种表达式要除Y,对不对,叫事件指定表达式,是不是要除外,OK吧,OK好,那同时一旦创建我就要去做事情了,做什么事了,就要建立我想要跟什么地婆的关系。这个关系是不是相互的?那其实这个相互关系更重要的一个是把这个water放在什么呢?Deep里面去,这个是最重要的,那个将deep放到我里面,纯粹是为了一个什么事呢?防止。重复建立。我把我放到地方去,这个事情。很重要,为什么?因为后面我要利用这个关系来去掌握起来,去更新了。也就说现在我做的事情是将我添加到什么对应的地中,这个地方是所有对应的地中,对不对?
08:16
可能是不是有多个这个能懂不,那另外的一个关系我就不在这画了啊,另外一个关系我就不在这画了,画这一个关系。Deep里面是不是有一个属性叫subs是吧?啊SS,我们说S是什么意思?订阅者列表对吧,谁是订阅者我讲好。其实到这里,初始化的整个流程就完了。初始化流程做了两件事,第一件事情实现了初始化显示,第二件事情为更新做了准备,这更新准备有两个方面,一个是实现了数据截值对吧,再一个创建了对应的我和什么第。
09:05
那后面就是我点击更新按钮,我点击更新按钮做了一个啥事啊,那这个时候换个颜色啊,因为是更新了,我说的一些事情叫this.name等于一个叉叉对不对。是不是改了一个值啊?而这一整就会导致于谁知道了呢?Observe里面的什么对应的是不是set才知道了,而set里面会先告诉谁去告诉对应的什么第。这个它对应多个地图吗。它对应多个地方吗?不是我改的是某一个属性啊,对不对,某一个属性只能跟某一个地方是对应。
10:02
是不是概念好,而我一旦改了它啊,通知它,而它里面又通知谁去了我哎,我写这个时候就要强调一下了,这个时候这个时候来,我们先把这个啊,是不是通知对应的对应某个啊地方对吧,这个懂不懂啊,而这个时候是通知什么,所有相关的过程。能不能看到通知所有相关的,我写这个所有就有可能是多个是吧?呃,我写介绍的通知会干嘛呀?前面我是不是指定了更新节点的回调函数,干嘛去调用回调函数,调用回调函数干嘛去了,是不是这调用零的方法去更新界面。
11:06
对吧。就是这样一个省。大家如果对view的源码,对view的MVM的实现啊比较有兴趣,或者说想知道到底是怎么回事啊,大家需要去看一下我们的这一个。啊,详细的教程。啊,这个部分呢,在我们的教程系列中的45~62的章节。啊,这里面就非常详细的啊,从源码一行一行代码去分析它的一个实现的一个过程。啊,如果大家想找一个高薪水的工作,那这是一个非常重要的点。
12:06
嗯,希望大家能够掌握好,那我们这一个面试题呢,就先到这里。
我来说两句