Swift 可选属性占用内存空间?

问题描述 投票:0回答:1
  1. 类中的属性占用内存空间吗?我想应该是的。

  2. 可选类型占用了多少空间?

  3. 如果属性有默认值,是否会比可选类型占用更多空间?

如下:

class Person {
    var name: String?
}

class Person1 {
    var name1: String = ""
}

class Person2 {
    var name2: String = "Jim"
}

class Person3 {
    var name: String
    init(name: String) {
        self.name = name
    }
}

当我定义这些变量时,

person2
会占用更多空间吗?或者它们都占用相同的空间。

let person = Person()
let person1 = Person1()
let person2 = Person2()
let person3 = Person3(name:"Jack")

其他变量怎么样?我想如果我使用

UIImage
然后使用如下图像进行初始化:

let image = UIImage(name: "abc.png")

一定要占一些空间。

为什么我问这个是因为我看到一些代码如下:

var name: String = ""

我认为应该使用可选字符串没有默认值。

谢谢您的回答!

编辑 对于问题1:苹果的ARC说:

每次创建类的新实例时,ARC 都会分配一个块 存储有关该实例的信息的内存。这段记忆保存着 有关实例类型的信息以及值 与该实例关联的任何存储属性。

所以我的第一个问题应该是

编辑2

所有输出都是8:

MemoryLayout.size(ofValue:person2)
MemoryLayout.size(ofValue:person1)
MemoryLayout.size(ofValue:person)

即使我向类添加更多属性。

编辑3

MemoryLayout.size(ofValue:"good") // Output: 24

var ok:String?
MemoryLayout.size(ofValue:ok) // Output: 25


var ok1: String? = "good"
MemoryLayout.size(ofValue:ok) // Output: 25

编辑4

class Person4 {
    var name: String = "good"
    let image = UIImage(named: "no")
}

let person4 = Person4()
MemoryLayout.size(ofValue:person4) // Output is 8

我想我的问题都得到了解答。我还是不清楚像EIDT4输出仍然是8?

swift memory
1个回答
0
投票

我刚刚读了你的查询,虽然它是非常古老的查询,但我也在这里发表评论,

您需要使用以下语法来检查类的大小: 打印(class_getInstanceSize(Person.self))

和 print(MemoryLayout.size(ofValue: Person4)) for struct,其中 Person4 是结构对象 那么你就可以理解结构体和类内存分配之间的区别了。

如果您有任何疑问,请告诉我。

但可选不会减少内存大小。

© www.soinside.com 2019 - 2024. All rights reserved.