类中的属性是否占用了任何内存空间?我认为应该是的。
可选类型占用了多少空间?
如果属性有默认值,是否需要更多空间,那么可选类型?
如下所示:
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:Apple的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
EDIT4
class Person4 {
var name: String = "good"
let image = UIImage(named: "no")
}
let person4 = Person4()
MemoryLayout.size(ofValue:person4) // Output is 8
我认为我的问题都得到了解答。我仍然不清楚EIDT4的输出仍然是8?