在每个@Composable()
中使用x.dp(例如1.dp
)是否会导致性能问题?
因为它每次都会创建一个新对象?
@Stable
inline val Int.dp: Dp get() = Dp(value = this.toFloat())
用所有DP定义一个恒定的类是不是一种好的做法?
在每个@Composable()
中使用x.dp(例如1.dp
)是否会导致性能问题?
因为它每次都会创建一个新对象?
@Stable
inline val Int.dp: Dp get() = Dp(value = this.toFloat())
用所有DP定义一个恒定的类是不是一种好的做法?
不会影响运行时性能.
Dp
是柯特林inline value class
.在幕后,它只是一个具有方便功能的Float
,看起来像一个物体.Kotlin编译器将所有使用内联到Float
值.(请注意,这将对编译时产生very次要的影响.)
在运行时没有对象创建/装箱或垃圾回收,只是将Int
转换/复制到Float
.(如果Int
是文字,则Kotlin编译器可能会优化该转换/复制,在编译时执行Float
转换.)
当Dp
用于调整@Composable
内部的大小时,实际像素大小将通过将此Float
乘以屏幕密度来计算.该乘法运算速度很快,但如果在许多地方使用生成的像素值,则可能需要存储它.(例如,如果要在Canvas
中绘制)