flutter 知识点(六)

283 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

Dart是值传递还是引用传递?

dart是值传递

dart当值的..表示什么?

.. 是级联操作符,为了方便配置使用。 ..后返回的相当于this .返回的是该方法的返回值

dart的作用域

dart 没有像public private等关键字,默认是公开的。私有变量使用_开头

dart是不是单线程模型?是如何运行的?

dart是单线程模型。

Dart在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队列” microtask queue,另一个叫做“事件队列” event queue。微任务队列的执行优先级高于事件队列。

Dart大致运行原理:先开启app执行入口函数main(),执行完成之后,消息机制启动,先是会按照先进先出的顺序逐个执行微任务队列中的任务microtask,事件任务eventtask执行完毕后便会退出,但是,在事件任务执行的过程中也可以插入新的微任务和事件任务,在这种情况下,整个线程的执行过程便是一直在循环,不会退出,而Flutter中,主线程的执行过程正是如此,永不终止。

image.png

在事件循环中,当某个任务发生异常并没有被捕获时,程序并不会退出,而直接导致的结果是当前任务的后续代码就不会被执行了,也就是说一个任务中的异常是不会影响其它任务执行的。

在Dart中,所有的外部事件任务都在事件队列中,如IO、计时器、点击、以及绘制事件等,而微任务通常来源于Dart内部,并且微任务非常少,之所以如此,是因为微任务队列优先级高,如果微任务太多,执行时间总和就越久,事件队列任务的延迟也就越久,对于GUI应用来说最直观的表现就是比较卡,所以必须得保证微任务队列不会太长。

final 和const区别

用final修饰的变量,必须在定义时将其初始化,其值在初始化后不可改变;
const用来定义常量。

它们的区别在于,const比final更加严格。final只是要求变量在初始化后值不变,但通过final,我们无法在编译时(运行之前)知道这个变量的值;而const所修饰的是编译时常量,我们在编译时就已经知道了它的值,显然,它的值也是不可改变的。

Dart异步编程中的Stream数据流?

在Dart中,Stream 和 Future ⼀样,都是⽤来处理异步编程的⼯具。它们的区别在于,Stream 可以接收多个异步结果,⽽Future 只有⼀个。 Stream 的创建可以使⽤ Stream.fromFuture,也可以使⽤ StreamController 来创建和控制。还有⼀个注意点是:普通的Stream 只可以有⼀ 个订阅者,如果想要多订阅的话,要使⽤ asBroadcastStream()。