在我迄今为止开发的应用程序中,我总是有UIViewController
负责呈现其他UIViewController
以显示UI中的转换。每当我有一个“托管”视图控制器调用“管理”视图控制器中的方法时,我必须确保我有一个对托管控制器内部管理控制器的引用。
例如:
如果我有UIViewController
名为MainController
,负责管理应用程序用户界面中的其他UIViewController
,MainController
会创建2个控制器进行演示。分别称为SubController1
和SubController2
。如果SubController1
完成且MainController
需要显示SubController2
,我始终在MainController
内设置SubController1
引用变量,以便它可以传达更改到MainController
。这意味着,只要MainController
创建SubController1
,就必须将SubController1
的{{1}}引用变量设置为MainController
。
我是否应该担心这种通信方式的内存使用情况?我是否会更好地使用这种行为的通知?我现在使用的方法找到的主要好处是,如果有必要,它可以非常容易地在视图控制器之间共享信息。非常感谢任何想法。
答案 0 :(得分:2)
处理其他视图中的更改,操作或用户交互是delegates的基本用例。最佳实践是让主控制器成为第一个/第二个视图控制器的委托,然后当子控制器中发生事件时,它们会在其委托上调用某些方法,然后可以采取任何必要的操作。
以您描述的方式传递引用不会产生明显的内存影响,但是它会将代码紧密地耦合到MainController
,这应该避免。您应该努力灵活处理未来的潜在变化。如果您转换到通用应用程序并且iPad UI具有截然不同的结构会发生什么?对于代理人,您只需要确保控制器之间的合同完好无损,但可以随意更改任何底层实现细节。
在视图之间保持值/状态同步的其他选项是:
NSNotification
通过NSNotificationCenter
发送 - 最适合用于操作