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

建设网站比较好网站设计确认书

建设网站比较好,网站设计确认书,深圳网站建设美橙互联,企业网站建设熊掌号高阶函数实现的原理:函数类型其实是生成了一个对象 。 inline翻译成中文的意思就是内联,在kotlin里面inline被用来修饰函数,表明当前函数在编译时是以内嵌的形式进行编译的,从而减少了一层函数调用栈: inline fun fun…

高阶函数实现的原理:函数类型其实是生成了一个对象 。

inline翻译成中文的意思就是内联,在kotlin里面inline被用来修饰函数,表明当前函数在编译时是以内嵌的形式进行编译的,从而减少了一层函数调用栈:

inline fun fun1() {Log.i("tag", "1")
}//调用
fun mainFun() {fun1()
}//实际编译的代码
fun mainFun() {Log.i("tag", "1")
}

这样写的一点好处就是调用栈会明显变浅:

但是这个好处对应用程序的优化影响非常小,几乎可以忽略不计。甚至可能会由于多处调用代码重复编译导致编译字节码膨胀从而造成包体积变大的问题,这就得不偿失。

我们都知道kotlin允许函数可以作为另一个函数的入参对象进行调用,在实际调用处入参的函数体会被创建为一个对象:

fun fun1(doSomething: () -> Unit) {Log.i("tag", "1")doSomething()
}//调用
fun mainFun() {fun1 {Log.i("tag", "2")}
}//实际编译的代码
fun mainFun() {val f = object: Function0<Unit> {override fun invoke() {Log.i("tag", "2")}}fun1(f)
}

一般情况下上图所示的调用逻辑并没有什么问题,创建一个小对象并不会对性能造成什么影响,但是如果我们将fun1放入for循环中呢:

fun mainFun() {for (i in 0..1000) {fun1 {Log.i("tag", "2")}}
}

在短时间内就会在mainFun函数中循环创建1000个f对象,这样应用进程的内存会瞬间飙升并造成某些性能上的严重问题,这就类似于为什么不让在onDraw函数中创建局部对象。

而作为fun1函数的创建者,我们无法知道调用者会在什么场景以及时机去调用fun1函数,一旦出现上述重复创建大量函数对象的场景那么就会有严重的性能问题,而且这也是kotlin高阶函数的一个性能隐患。所以,基于这个问题kotlin提供了inline关键字来解决。

inline关键字可以将函数体内部的代码内联到调用处,甚至还可以将函数体内部的内部的代码也内联过去,而这个内部的内部的指的就是函数内部的函数类型的参数:

inline fun fun1(doSomething: () -> Unit) {Log.i("tag", "1")doSomething()
}//调用
fun mainFun() {for (i in 0..1000) {fun1 {Log.i("tag", "2")}}
}//实际编译的代码
fun mainFun() {for (i in 0..1000) {Log.i("tag", "1")Log.i("tag", "2")}
}

这样就避免了函数类型的参数所造成的临时函数对象的创建,我们就可以在界面高频刷新、大量循环的场景下放心调用fun1函数了。

扩展:

Kotlin的 noinline和crossinline关键字-CSDN博客

总结

总的来说,inline关键字让函数以内联的方式进行编译避免创建函数对象来处理kotlin高阶函数的天然性能缺陷。同时,之前的文章中提到的kotlin的泛型实化,也是利用了inline关键字可以内嵌函数代码的特性而衍生出来的全新功能。

http://www.dtcms.com/wzjs/590639.html

相关文章:

  • 福建有没有网站做鞋子一件代发qq官网登录
  • 做新闻微网站有哪些方面现在去横琴会变黄码吗
  • 贵阳做网站需要多少钱有哪些好的做问卷调查的网站好
  • 江西省美丽乡村建设公布网站网站换ip影响 百度
  • 北京建设教育协会的网站广州新业建设管理有限公司网站
  • 知名企业网站搭建新感觉全网价值营销服务商wordpress 搜索 提示
  • 灵感中心素材网站申请网站域名多少钱
  • 中国做的比较好的网站设计公司有哪些帮别人做网站收多少钱合适
  • 做360手机网站优化快苏州诗华洛网站建设
  • 一级a做爰片免费网站孕交视频app制作软件手机版免费下载
  • 做网站公司选哪家在线图片编辑器图怪兽
  • 河北工程大学网站开发成本网络营销推广案例
  • 有没有专门做游戏人物的绅士视频网站怎么夸一个网站开发公司
  • 公司的网站建设计入什么科目wordpress游客发言
  • 长沙县不错的建站按效果付费网页设计代码单词
  • 上海网站制作团队服务好的网站建设平台
  • 西安网站制作公司有哪家wordpress默认中文
  • 做网站 以图搜货检测WordPress网站的安全性
  • 南昌网站建设索王道下拉网页生成pdf不显示
  • 电脑如何建立网站网站可兼容移动端
  • 军用棉被门网站建设企业网站优化的原则
  • 织梦确定网站风格wordpress 增加语言包
  • 做网站的计划书个人网站建设在哪里
  • 适合平面设计师的网站微商如何引流与推广
  • 企业网站建设选题的依据及意义wordpress 没有样式表
  • 丹阳企业网站制作php网站开发框架
  • 亚马逊网站开发的技术做商城网站的企业
  • 怎么做中英文双语网站网站建设800元全包
  • 微软网站开发工具有哪些能在线做英语题目的网站
  • 河南省建设工程网站零基础学软件开发难吗