【问题标题】:Modal view controllers life cycle?模态视图控制器生命周期?
【发布时间】:2014-01-30 11:24:47
【问题描述】:

我已阅读 Apple 的 design patterns 文档和其他一些指南,但有些内容我无法理解。

遇到viewControllers之间传递变量的问题,看到delegate选项。 比我意识到,如果您从 viewControlA 转到 viewControlB ,并且需要将一些 mutableArray 从 B 更新到 A ,您可以从 B 发布委托,A 会得到它。

但是,如果A 能听到代表的声音,那说明我去B 后A 还活着。 我在想只有当你push在views之间时,前一个场景还活着,但是当transition是modal时,前一个场景实际上已经死了。

每个视图控制器类的生命周期是什么?他们永远活着?

【问题讨论】:

    标签: ios objective-c uiviewcontroller modalviewcontroller


    【解决方案1】:

    如果您有两个UIViewControllers,分别称为AB,并且您想以模态方式显示B,则A 将保留在内存中。没有人告诉A 删除(在代码的其他部分将其删除之前,这是真的)。​​

    所以,A 可以响应 B,直到后者 (B) 仍然是 A (presentingViewController) 的 presentedViewController

    关于delegate,你可以避免它。例如,假设 AB 像这样的属性

    @property (nonatomic, strong) NSMutableArray* myArray;
    

    在将B 呈现为模态控制器之前,您可以说

    B* b = // alloc init
    b.myArray = [self myArray];
    // present modally B
    

    现在他们将接触同一个数组。当B 被解除(如果你没有引用它,它将从内存中释放),在myArray(在A 内)你会发现在B 中完成的修改。

    显然这只是一个例子。这并不是不使用delegates 的建议。

    如需进一步参考,我只需查看 Apple Doc 中的 Presenting View Controllers from Other View Controllers

    【讨论】:

    • 非常感谢!那么 A 什么时候从内存中清除?如果我从 A 到 B 和 C,所有的链条都在内存中吗?如果我通过解雇 B 从 B 转到 A ,那么 B 就死了?
    • @Curnelious 您需要考虑对象图。根-->A-->B。如果 B 被解雇,现在你有 ROOT--> A。如果 ROOT 解雇​​ A,你将只有 ROOT。附言如果您愿意,也可以投票。干杯。
    • @Curnelious 显然您需要查看保留周期。请参阅我对此stackoverflow.com/questions/11168916/… 的回答。它涵盖了很多方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多