2.5 inline, noinline, crossline 总结 inline 可以让你用内联——也就是函数内容直插到调用处的方式来优化代码结构,从而减少函数类型的对象的创建; noinline 是局部关掉这个优化,来摆脱 inline 带来的「不能把函数类型的参数当对象使用」的限制; crossinline 是局部加强这个优化,让内联函数里的函数类型的参数可以被当...
inline修饰的函数可以进行非局部返回(也就是可以使用return),没有inline修饰的函数只能进行局部返回(return@局部函数域名) inlinefunhasInlineFunc(action: () ->Unit){// 添不添加crossinline都一样,添加后可以提示我们,action的lambda中不要出现return,因为该函数有可能会在其他的lambda中进行调用action() }funnoInl...
在Kotlin 中使用内联函数时,有时结合这几个关键字可提高程序性能。 概览 inline: 声明在编译时,将函数的代码拷贝到调用的地方(内联) noinline:声明 inline 函数的形参中,不希望内联的 lambda crossinline:表明…
inline(内联): 编译时将函数的代码拷贝到调用的地方。 noinline(非内联): 内联高阶函数的形参中,不希望内联的lambda参数。 crossinline: 内联高阶函的形参中的lambda不能有非局部return,该lambda需要间接调用就需要。 二、使用分析 1、局部返回:只返回当前代码块。 lambda表达式默认最后一行是返回值,不能使用非局部r...
Kotlin的inline、noinline和crossinline关键字 一、inline inline翻译成中文的意思就是内联,在kotlin里面inline被用来修饰函数,表明当前函数在编译时是以内嵌的形式进行编译的,从而减少了一层函数调用栈: 这样写的一点好处就是调用栈会明显变浅: 但是这个好处对应用程序的优化影响非常小,几乎可以忽略不计。甚至可能会...
说完inline,我们来说另一个关键字:noinline。noinline 的意思很直白:inline 是内联,而 noinline 就是不内联。不过它不是作用于函数的,而是作用于函数的参数:对于一个标记了 inline 的内联函数,你可以对它的任何一个或多个函数类型的参数添加 noinline 关键字: ...
noinline 上面我们了解了inline内联函数的使用和优势,接着我们看一下配合inline使用的noinline,看名字大致可以猜测到,noinline就是非内联的意思,也就是表明被noinline修饰的参数强制不允许内联,此参数作为一个普通的函数引用传递,并且noinline必须搭配inline使用。下面还是通过代码来直观感受下noinline的作用。
kotlin语法复习--->局部返回,inline,noinline和crossinline inline关键字 inline关键字是作用: 在函数上的一个关键字,其作用就是在class文件中,kotlin的函数体代码会直接放在调用的位置 另外就是,当函数类型参数含有函数类型参数时,添加inline关键字会提高程序的性能,但是,该函数参数不能作用一般的参数进行参数调用。
6. Kotlin 的 inline、crossinline、noinline 关键字的特殊使用 在前面的第2节 Kotlin 的自定义操作符中,已经说明了 inline 关键字的基本用法,知道了内联函数可以通过直接将代码拷贝到调用的地方从而加快程序执行速度的特性。除了 inline 关键字外,还有 crossinline 和 noinline 两个关键字,来看看它们还有什么特殊的用...
没有noinline,整个 largeProcessingLogic lambda 每次调用 processData 时都会被复制到循环中,从而大幅增加字节码的体积。使用 noinline,只会传递 lambda 的引用,避免了代码复制。 crossinline — 处理非局部返回值 crossinline 帮助你控制 return 关键字在传递给 inline 函数的 lambda 中的行为。它使 return 的行为更容...