【问题标题】:Does `let` make a copy of the data?`let` 会复制数据吗?
【发布时间】:2022-06-15 04:31:05
【问题描述】:

在我的 ViewModel 中,我有这个 LiveData 列表:

val liveList: LiveData<List<Int>>

在我的 Activity 中,有时我会像这样访问列表中的数据:

viewModel.liveList.value?.let { letList ->
    while (letList.size < 10)
        delay(100)

一些数据同时添加到liveList。 (上面的 sn-p 不在主线程中运行)。 letList 会看到对liveList 所做的这些更新吗?因此,letList 是否仍连接到 liveList

或者letListliveList 中列表的副本,是在let 执行的时间点创建的?因此,如果此时liveList 恰好有少于10 个元素,那么while 循环将永远不会终止,无论有多少元素添加到liveList

【问题讨论】:

    标签: kotlin kotlin-coroutines android-livedata


    【解决方案1】:

    letList 会看到对 liveList 所做的这些更新吗?

    是的,它指向同一个对象。

    那么,letList 是否仍然连接到 liveList?

    这并不是真正的“连接”。它只是对同一个对象的引用。

    或者 letList 是在执行 let 时创建的 liveList 中列表的副本?

    不,它不是副本。

    因此,如果此时 liveList 恰好有少于 10 个元素,那么无论在 liveList 中添加多少元素,while 循环都不会终止?

    看起来是这样的。

    尽管我质疑这是否是完成手头任务的最佳方法。或许你应该在列表上设置一个观察者,并在它知道发生变化时做一些事情,而不是忙着循环。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2021-11-24
      • 2021-10-22
      • 1970-01-01
      • 2012-03-08
      • 2013-05-07
      • 2019-11-17
      • 2012-06-19
      相关资源
      最近更新 更多