当我执行以下步骤时,我只是遇到了一种奇怪的行为,
视图显示正确。该视图有一个按钮,当我单击该按钮时,它会与EXEC_BAD-ACCESS
崩溃。调试一段时间后,发现视图控制器实例是释放,并且由于控制器不存在而未触发按钮单击事件。
当我将视图控制器的声明移动到类级别时,它开始工作。我觉得如果视图控制器的视图在屏幕上,则不应该保留视图控制器实例。
有什么想法吗?
一些代码指针。
class SomeViewController:UIViewController{
var workingVC:SomeVC?
func crashingMethod()
{
let vc:SomeVC = SomeVC(nibName:"SomeVC", bundle:NSBundle.mainBundle())
let delegate:AppDelegate = UIApplication.sharedApplication().delegate
let applWindow:UIWindow = delegate.window!
applWindow.addSubview(vc.view)
}
func workingMethod()
{
self.workingVC = SomeVC(nibName:"SomeVC", bundle:NSBundle.mainBundle())
let delegate:AppDelegate = UIApplication.sharedApplication().delegate
let applWindow:UIWindow = delegate.window!
applWindow.addSubview(self.workingVC!.view)
}
}
答案 0 :(得分:0)
当你创建这样的对象时
let vc:SomeVC = SomeVC(nibName:"SomeVC", bundle:NSBundle.mainBundle())
对象生命周期等于创建它的范围。 当范围结束时,ARC将释放此对象和所有关联对象。
但是,当您在类级别添加它时,此对象的生命周期等于所有者的生命周期(SomeViewController)。因此,它仅在所有者发布时发布。
你明白了吗? 您也可以在Memory Management Section in Apple Documentation
中阅读相关内容