保留周期在计算属性中是否可行?

时间:2016-03-24 02:44:39

标签: ios swift

我发现有一个类的剪切代码,并且该类具有CustomViewController的属性(继承UIViewController),并且在该属性的getter中,它们存储self。描述这个的最好方法是通过代码

class SomeClass: {

    var alertViewController: UIViewController? {
        if self.wasRequested {
            return self.chatController
        } else {
            let vc = CutomVC(nibName: "SomeNibName", bundle: nil)
            vc.alert = self
            return vc
        }
    }
}

现在,当你提出视图控制器时,它会被解除吗?这是保留周期吗?

谢谢

2 个答案:

答案 0 :(得分:0)

每当Self变量被解除分配时,

vc将被释放,假设它在其他地方没有被强烈引用。这不是保留周期,因为self没有强烈引用vc

但是,如果self添加vc作为子视图控制器(通过呈现或其他方式)self 保持对{{的强引用1}}。这在技术上是一个保留周期,但它无关紧要,因为每当从其父视图控制器vc中删除self时,都会删除对其自己的子视图控制器的所有引用。这会打破selfself之间的保留周期。

答案 1 :(得分:0)

只是为了向对快速回答感兴趣的其他人简化事情,不,这不是零售周期,在这种情况下总是调用 deinit。