【问题标题】:Kotlin object vs class memory allocationKotlin 对象与类内存分配
【发布时间】:2022-01-28 14:31:17
【问题描述】:

在我的应用中,我有一个单一的 Activity 架构,并且我为每个 Fragment 定义了一个“视图”类。

这个“视图”类包含视图状态和视图动作,它们引用视图的数据和动作。

例如,我有“MainFragment.kt”和一个相关的“MainView.kt”文件,如下所示:

object MainView {
    data class MainState(...) {...}
    
    sealed class Actions {
        sealed class Navigate : Actions() {
            object Back : Navigate()
            data class NextScreen(...) : Navigate()
        }
        object DoSomething : Actions()
    }
}

然后在“MainFragment.kt”及其“ViewModel”类中导入和使用“MainState”和“Actions”。

如您所见,“MainView”被定义为一个对象,因为我不需要实例化它。我使用它的方式只是使用它包含的数据(状态和动作)。这也是一种更安全的设计方法,因为我只需要在任何时候都存在“视图”类的一个实例。

可能的问题: 但是,由于有很多 Fragment,因此有很多 View 类对应于它们,那么应用程序显然会有很多对象。当然,这些对象是静态分配在内存中的,这可能会导致内存使用量增加。

问题: 有没有更好的方法来定义我的“视图”类?例如,如果我将“MainView.kt”定义为一个类(例如 class MainView(){...})而不是一个对象,在内存分配和性能方面会更好吗?

【问题讨论】:

    标签: java android kotlin garbage-collection singleton


    【解决方案1】:

    别担心。不像这些object 类具有保存兆字节状态的属性。在上面的示例中,它根本没有状态。您项目中的每个objects 可能会增加不超过 128 个字节的开销(一个字用于实例,一个字用于参考)。

    假设您的项目中有 100 个。您可以通过将对象更改为类来减少这种开销(从而使它们宣传您不应该对它们做的事情,这样您的代码就不那么清晰了)。您节省的 RAM 将少于一行文本所使用的内存。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 2014-03-17
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多