ARC的MVC模式

时间:2012-06-21 11:55:49

标签: iphone ios model-view-controller automatic-ref-counting

作为iOS的新手,我发现ARC到目前为止真正有助于快速发展。话虽如此,有一些警告我不确定ARC是如何适应的,以及之前的长期iOS模式,如MVC。这就是我试图描绘事物的方式,我的理解中的任何澄清或更正都将受到高度赞赏。

我正在使用Storyboard为我的应用实例化和设置一些视图控制器。从我读过的文档中,当活动视图控制器分割到不同的视图控制器时,发送视图控制器实例变量丢失(是吗?/否?)。因此,我正在使用模型层来存储应用程序的数据。现在,我的理解开始变得更加模糊......

假设我只有一个视图控制器正在使用模型数据对象。我在视图控制器中(在viewDidLoad中)分配和实例化数据对象。所以现在我从我的控制器中引用了数据对象,当控制器在前台时,可以自由地协调来自视图,控制器,可能是数据对象的信息,返回控制器以使用MVC模式。好的,很酷..

但是当我转向不同的视图控制器时,发送方控制器的实例变量将丢失,因此对数据对象的唯一引用将丢失。 ARC是否会自动释放数据对象?

我的目标是能够保存特定视图控制器的数据,这样当我返回它时,我可以用保存的状态更新它。如何在iOS中使用MVC和ARC完成这项工作?我想到的选项(记住,我是新的哈哈)

  1. 在Application Delegate中包含对数据对象的引用。它不会去任何地方,因此对数据对象的引用也不会。这个很好吗?
  2. 以静态形式将所有数据存储在数据类对象中?
  3. 使用NSUserDefaults
  4. 任何建议都会受到高度赞赏。谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

如果您正在使用push或modal segue,则前一个视图的视图控制器已释放。如果您收到didReceiveMemoryWarning,则视图本身可能会被释放,但控制器不会。您的控制器的ivars将被保留,因此当辅助视图控制器弹出(或解除)时,您的原始ivars将与之前一样。