在到目前为止开发的应用程序中,我一直都有一个UIViewController
负责呈现其他UIViewController
,以在UI中显示过渡。每当我有一个“托管”视图控制器在“管理”视图控制器中调用方法时,就必须确保对托管控制器内部的管理控制器具有引用。
例如:
如果我有一个称为UIViewController
的MainController
负责管理应用程序UI中的其他UIViewController
,并且MainController
创建了两个用于演示的控制器。分别称为SubController1
和SubController2
。如果SubController1
完成并且MainController
需要显示SubController2
,我总是在MainController
内设置一个SubController1
参考变量,以便它可以将更改传达给MainController
。这意味着,每当MainController
创建SubController1
时,都必须将SubController1
的MainController
参考变量设置为self
。
我应该担心这种通信方式对内存的使用吗?使用这种行为的通知会更好吗?我现在使用的方法的主要好处是,如果需要,它使在视图控制器之间共享信息变得异常容易。任何想法都将不胜感激。
最佳答案
在其他视图中处理更改,操作或用户交互是delegates的基本用例。最佳实践是让主控制器成为第一个/第二个视图控制器的委托,然后当子控制器中发生事件时,它们在其委托上调用某些方法,然后可以采取任何必要的措施。
以您描述的方式传递引用不会对内存产生明显影响,但是会将您的代码与MainController
紧密耦合,应该避免。您应该争取灵活性,以应对将来的潜在变化。如果您过渡到通用应用程序,并且iPad UI具有截然不同的结构,会发生什么?使用委托,您只需要确保控制器之间的协定是完整的,而可以自由更改任何基础实现细节。
在视图之间保持值/状态同步的其他选项是:
NSNotification
发送的NSNotificationCenter
-最好用于操作关于ios - 有没有更好的方法可以从托管 View Controller 中调用托管 View Controller 中的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16084173/