我们说我们有这个代码:
func getSomeString() -> String {
let str = "Some string"
print(str)
return str
}
所以我想知道这个str
何时会被ARC取消分配?
我认为这取决于我从这个函数获取后对这个对象做了什么。例如。我们有这个方法:
func anotherMethod() {
let anotherStr = getSomeString()
}
因此str
getSomeString()
anotherMethod()
将在iframe {
width:200px;
height:200px;
position:absolute;
border:solid 1px #000;
}
#front {
position:absolute;
border:solid 1px #000;
width:100px;
height:100px;
left:120px;
top:120px;
background:#f00;
box-shadow:0 0 10px #666;
}
被调用后被解除分配。我对吗?如果不是那么这将如何发生?
答案 0 :(得分:1)
在您的情况下,不会发生释放,因为 String
是值类型。值类型不受ARC的影响。你甚至无法引用它们。它们只是价值观。
虽然String
是值类型,但它包装了一个用于存储的引用类型。但是,由于我们无法覆盖包装类型的取消初始化程序,因此我将使用此代码演示返回引用类型时会发生的情况:
// class is a reference type!
class MyClass {
deinit {
print("deallocated")
}
}
func getSomeObject() -> MyClass {
let obj = MyClass()
return obj
}
func anotherMethod() {
let anotherObj = getSomeObject()
}
anotherMethod()
print("returned")
在控制台中,"取消分配"在"返回"之前打印。这意味着,当anotherMethod
返回时,obj
已被解除分配,因为没有引用它的变量。