当前位置: 首页 > 知识库问答 >
问题:

Kotlin对象与类内存分配

苏鸿羽
2023-03-14

在我的应用程序中,我有一个单一的活动架构,我为每个片段定义了一个“视图”类。

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

例如,我有一个“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()
    }
}

然后导入“主状态”和“操作”,并在“主状态ragment.kt”及其“视图模型”类中使用。

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

可能的问题:但是,由于有许多片段,因此有许多视图类与之对应,因此应用程序显然会有许多对象。当然,这些对象是在内存中静态分配的,这可能会增加内存使用。

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

共有1个答案

费德宇
2023-03-14

别担心。这不像这些对象类的属性包含兆字节的状态。在上面的例子中,它根本没有状态。项目中的每个对象都可能会增加不超过128字节的开销(一个单词代表实例,一个单词代表引用)。

假设你的项目中有100个。您可以通过将对象更改为类来减少这种开销(从而使它们发布一些您不应该使用它们的东西,这样您的代码就不那么清晰了)。您将节省比一行文本使用更少的内存。

 类似资料:
  • 为什么不是: 如有任何帮助,我们将不胜感激。

  • jvm的对象头是如何存储的? 对象头中有哪些信息? 对象头里面的东西:运行时元数据,类型指针:Hashcode,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳。如果是数组的化还需要记录长度 就比如下面的代码来看,内存分布情况: 由于是static的main方法所有局部变量表没有this,如果是非静态方法的话第一个放this。 其次: 栈帧:局部变量表,操作数栈,动态链接,方法返回

  • 主要内容:类定义,类的属性,主构造器,次构造函数,抽象类,嵌套类,内部类,匿名内部类,类的修饰符类定义 Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。 Kotlin 中使用关键字 class 声明类,后面紧跟类名: 我们也可以定义一个空类: 可以在类中定义成员函数: 类的属性 属性定义 类的属性可以用关键字 var 声明为可变的,否则使用只读关键字 val 声明为不可变。 我们可以像使用普通函数那样使用构造函数创建类实例: 要使用一个属性,只要用名称引用它即

  • 类定义 Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。 Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 Runoob // 大括号内是类体构成 } 我们也可以定义一个空类: class Empty 可以在类中定义成员函数: class Runoob() { fun foo()

  • 一个常见的编程习惯是在空闲存储区中动态分配内存(可能是对象),将该内存的地址赋给一个指针,使用这个指针操作内存,并在该内存不再需要时用delete释放内存。如果内存分配之后和执行delete语句之前发生异常,则可能发生内存泄漏。ANSI/ISO C++草案标准提供 <memory> 头文件中的auto_ptr类模板,可以解决这个问题。 auto_ptr 类对象维护动态分配内存的指针。当auto_p

  • 问题类文件数据类问题(val id:Int,val问题:String,val图像:Int,val选项一:String,val选项二:String,val选项三:String,val选项四:String,val更正答案:Int, 对象文件结果: 对象常量{ 返回问题列表}