我发现有一个类的剪切代码,并且该类具有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
}
}
}
现在,当你提出视图控制器时,它会被解除吗?这是保留周期吗?
谢谢
答案 0 :(得分:0)
Self
变量被解除分配时, vc
将被释放,假设它在其他地方没有被强烈引用。这不是保留周期,因为self
没有强烈引用vc
。
但是,如果self
添加vc
作为子视图控制器(通过呈现或其他方式)self
将保持对{{的强引用1}}。这在技术上是一个保留周期,但它无关紧要,因为每当从其父视图控制器vc
中删除self
时,都会删除对其自己的子视图控制器的所有引用。这会打破self
和self
之间的保留周期。
答案 1 :(得分:0)
只是为了向对快速回答感兴趣的其他人简化事情,不,这不是零售周期,在这种情况下总是调用 deinit。