返回的对象和Swift中的ARC

时间:2017-06-20 06:00:24

标签: swift automatic-ref-counting

我们说我们有这个代码:

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; }被调用后被解除分配。我对吗?如果不是那么这将如何发生?

1 个答案:

答案 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已被解除分配,因为没有引用它的变量。