是否有更好的方法从托管视图控制器调用管理视图控制器中的方法?

时间:2013-04-18 13:22:00

标签: ios objective-c cocoa-touch uiviewcontroller

在我迄今为止开发的应用程序中,我总是有UIViewController负责呈现其他UIViewController以显示UI中的转换。每当我有一个“托管”视图控制器调用“管理”视图控制器中的方法时,我必须确保我有一个对托管控制器内部管理控制器的引用。

例如: 如果我有UIViewController名为MainController,负责管理应用程序用户界面中的其他UIViewControllerMainController会创建2个控制器进行演示。分别称为SubController1SubController2。如果SubController1完成且MainController需要显示SubController2,我始终在MainController内设置SubController1引用变量,以便它可以传达更改到MainController。这意味着,只要MainController创建SubController1,就必须将SubController1的{​​{1}}引用变量设置为MainController

我是否应该担心这种通信方式的内存使用情况?我是否会更好地使用这种行为的通知?我现在使用的方法找到的主要好处是,如果有必要,它可以非常容易地在视图控制器之间共享信息。非常感谢任何想法。

1 个答案:

答案 0 :(得分:2)

处理其他视图中的更改,操作或用户交互是delegates的基本用例。最佳实践是让主控制器成为第一个/第二个视图控制器的委托,然后当子控制器中发生事件时,它们会在其委托上调用某些方法,然后可以采取任何必要的操作。

以您描述的方式传递引用不会产生明显的内存影响,但是它会将代码紧密地耦合到MainController,这应该避免。您应该努力灵活处理未来的潜在变化。如果您转换到通用应用程序并且iPad UI具有截然不同的结构会发生什么?对于代理人,您只需要确保控制器之间的合同完好无损,但可以随意更改任何底层实现细节。

在视图之间保持值/状态同步的其他选项是:

相关问题