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

时间:2017-12-27 03:00:05

标签: swift memory

  1. 类中的属性是否占用了任何内存空间?我认为应该是的。

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

  3. 如果属性有默认值,是否需要更多空间,那么可选类型?

  4. 如下所示:

    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?

0 个答案:

没有答案