作者:nzl | 来源:互联网 | 2022-12-08 08:02
所以我有点困惑,因为信息冲突,只是寻找关于类属性的内存分配的一些清晰度.
所以这是我的假设,如果有任何错误,请告诉我:
在Swift中,除了类和函数之外,所有内容都由Value传递.
在Heap上分配类实例(对象)
传递对象时,传递指针
引用对象上的属性时,将取消引用指针,并检索属性的值
因此,这里是我的困惑,说我class
有一个String
属性,一个Int
属性.两种Swift数据类型,在任何普通情况下都可以通过值传递.
如果我要求let test = object.stringProperty
,我是否会将我的字符串值的副本复制到我的test
变量中?
同样,如果我在班上有一个方法,
func getAllProperties() -> (String, Int) {
return (self.stringProperty, self.intProperty)
}
是object.getAllProperties()
要在元组中返回属性的副本?
我知道这似乎是一个基本问题,但在阅读了几个来源之后,我最终比起初时更加不确定
1> matt..:
是的,是的.String和Int 在一个类中并不重要.您要求String或Int(或两者),这些是值类型,您有副本.
很容易向自己证明这一点,特别是使用String.只需更改一些内容,然后回顾一下类实例所持有的内容:它将保持不变.
class C {
var stringProperty : String
init(string:String) {
self.stringProperty = string
}
}
let c = C(string:"hello")
var s = c.stringProperty
s.removeLast()
print(s) // hell
print(c.stringProperty) // hello
如果您希望在操作中看到class-as-reference,请创建两个相同的实例并对其中一个执行以下操作:
class C {
var stringProperty : String
init(string:String) {
self.stringProperty = string
}
}
let c = C(string:"hello")
let d = c
c.stringProperty = "goodbye"
print(d.stringProperty) // goodbye