是否保留UIViewController或不在导航堆栈中

时间:2010-07-06 03:50:25

标签: iphone cocoa-touch memory-management uiviewcontroller uinavigationcontroller

我有一个场景,我不确定是否保留视图控制器。说我有ViewControllerOne。按下按钮后,ViewControllerOne会在导航堆栈中推送ViewControllerTwoViewControllerTwo需要引用ViewControllerOne,因为它需要访问该视图控制器中的ivar。问题是,我会在ViewControllerOneViewControllerTwo)中保留@property (retain) ViewControllerOne *vc吗?导航控制器已经保留ViewControllerOne所以我不太确定。

由于

3 个答案:

答案 0 :(得分:0)

问题是:为什么ViewControllerTwo需要从ViewControllerOne访问ivar?

更好的方法是在将ViewControllerOne推送到堆栈之前,将ViewControllerTwo中的ivar值传递给ViewControllerTwo

答案 1 :(得分:0)

您应该将viewControllerOne设置为viewControllerTwo的委托。一般情况下,不保留代表。

正如您所描述的那样,viewControllerTwo特别不需要了解有关viewControllerOne的任何信息,它只需要知道如何访问一段数据并告知更高级别的对象该数据的更改。这是代表的共同角色。

答案 2 :(得分:0)

Ranpraygo是对的。

最好的解决方案是向ViewControllerTwo添加一个属性,然后将iVar从ViewControllerOne传递给它,然后再将其推送到导航堆栈。

按照惯例,添加到ViewControllerTwo的属性应保留,如果它是一个对象,尽管你可以在这个例子中使用一个已分配的属性,因为ViewControllerTwo将在ViewControllerOne之前发布,我假设ViewControllerOne保留了iVar

在objectiveC中,作为对象的所有变量都通过引用原语传递,结构体通过值传递,就像它们在C中一样传递