【问题标题】:Retain UIViewController or not in navigation stack是否保留 UIViewController 在导航堆栈中
【发布时间】:2011-03-12 03:15:27
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    更好的方法是将ViewControllerOne 中的ivar 的值传递给ViewControllerTwo,然后再将ViewControllerTwo 推入堆栈。

    【讨论】:

    • 好的,那么我会在 ViewControllerTwo 中分配对 ivar 的引用,还是保留它?我希望对 ViewControllerTwo 中的 ivar 所做的任何更改都反映在 ViewControllerOne 中
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      Ranpraygo 是正确的。

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

      按照惯例,如果添加到 ViewControllerTwo 的属性是一个对象,则应该保留它,尽管在此示例中您可以使用分配的属性,因为 ViewControllerTwo 将在 ViewControllerOne 之前释放,我假设 ViewControllerOne 保留了 iVar

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

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2021-08-14
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        相关资源
        最近更新 更多