Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift可选属性占用内存空间?_Swift_Memory - Fatal编程技术网

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

Swift可选属性占用内存空间?,swift,memory,Swift,Memory,类中的属性是否占用任何内存空间?我想应该是的 可选类型占用了多少空间 如果属性具有默认值,则它是否比可选类型占用更多空间 如下图所示: class Person { var name: String? } class Person1 { var name1: String = "" } class Person2 { var name2: String = "Jim" } class Person3 { var name: String init(n

类中的属性是否占用任何内存空间?我想应该是的

  • 可选类型占用了多少空间

  • 如果属性具有默认值,则它是否比可选类型占用更多空间

  • 如下图所示:

    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
    那么init的图像如下:

    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
    
    EDIT4

    class Person4 {
        var name: String = "good"
        let image = UIImage(named: "no")
    }
    
    let person4 = Person4()
    MemoryLayout.size(ofValue:person4) // Output is 8
    

    我想我的问题都回答了。我仍然不清楚,像EIDT4一样,输出仍然是8?

    这可能会有一些启发这似乎是过早的优化。这不会有什么不同。检查这个