kotlin 构造函数参数丢失?
kotlin Constructor parameters are missing ?
我为Glide写了一个MaskShapeTransformation,所以我想在我的Transformation中传递一个drawable,并用原始位图绘制这个drawable来制作遮罩效果。
一开始,我传递了一个像这样的可绘制对象并带有一个 SoftReference 以避免内存泄漏。
class MaskShapeTransformation(drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
但是当我使用 weakDrawable.get()?
可绘制对象时,可绘制对象为空
我不知道为什么,但我尝试了一切直到我改变了我的构造函数,我只是将 val
添加到修改后的 drawable 中,像这样
class MaskShapeTransformation(val drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
神奇的事情发生了,weakDrawable.get()?
工作得很好!
我很困惑,谁能告诉我这是为什么?
第一点:WeakReference
粗略地说,只要其他东西也使引用保持活动状态,就会保留引用。
第二点:Kotlin 构造函数语法意味着它们 非常 不同:
MaskShapeTransformation(drawable: Drawable)
MaskShapeTransformation(val drawable: Drawable)
第一个只是说你必须将 Drawable
传递给构造函数。第二个也这么说,但是 also 在 class 上创建一个字段并用传递的值初始化它。这意味着第二种形式为您提供了一个具有两个字段的对象:
drawable
: 持有传入的drawable
weakDrawable
: 弱引用环绕 drawable
.
将它们放在一起,现在你有一个 class 对 Drawable 有强引用,这意味着弱引用也将保持活动状态。
我为Glide写了一个MaskShapeTransformation,所以我想在我的Transformation中传递一个drawable,并用原始位图绘制这个drawable来制作遮罩效果。
一开始,我传递了一个像这样的可绘制对象并带有一个 SoftReference 以避免内存泄漏。
class MaskShapeTransformation(drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
但是当我使用 weakDrawable.get()?
可绘制对象时,可绘制对象为空
我不知道为什么,但我尝试了一切直到我改变了我的构造函数,我只是将 val
添加到修改后的 drawable 中,像这样
class MaskShapeTransformation(val drawable: Drawable): BitmapTransformation() {
private val weakDrawable = SoftReference(drawable)
.....
}
神奇的事情发生了,weakDrawable.get()?
工作得很好!
我很困惑,谁能告诉我这是为什么?
第一点:WeakReference
粗略地说,只要其他东西也使引用保持活动状态,就会保留引用。
第二点:Kotlin 构造函数语法意味着它们 非常 不同:
MaskShapeTransformation(drawable: Drawable)
MaskShapeTransformation(val drawable: Drawable)
第一个只是说你必须将 Drawable
传递给构造函数。第二个也这么说,但是 also 在 class 上创建一个字段并用传递的值初始化它。这意味着第二种形式为您提供了一个具有两个字段的对象:
drawable
: 持有传入的drawableweakDrawable
: 弱引用环绕drawable
.
将它们放在一起,现在你有一个 class 对 Drawable 有强引用,这意味着弱引用也将保持活动状态。