在到目前为止开发的应用程序中,我一直都有一个UIViewController负责呈现其他UIViewController,以在UI中显示过渡。每当我有一个“托管”视图控制器在“管理”视图控制器中调用方法时,就必须确保对托管控制器内部的管理控制器具有引用。

例如:
如果我有一个称为UIViewControllerMainController负责管理应用程序UI中的其他UIViewController,并且MainController创建了两个用于演示的控制器。分别称为SubController1SubController2。如果SubController1完成并且MainController需要显示SubController2,我总是在MainController内设置一个SubController1参考变量,以便它可以将更改传达给MainController。这意味着,每当MainController创建SubController1时,都必须将SubController1MainController参考变量设置为self

我应该担心这种通信方式对内存的使用吗?使用这种行为的通知会更好吗?我现在使用的方法的主要好处是,如果需要,它使在视图控制器之间共享信息变得异常容易。任何想法都将不胜感激。

最佳答案

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

以您描述的方式传递引用不会对内存产生明显影响,但是会将您的代码与MainController紧密耦合,应该避免。您应该争取灵活性,以应对将来的潜在变化。如果您过渡到通用应用程序,并且iPad UI具有截然不同的结构,会发生什么?使用委托,您只需要确保控制器之间的协定是完整的,而可以自由更改任何基础实现细节。

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

  • Core Data-最适合用于数据
  • Key-Value Observation-最适合用于数据
  • 通过 NSNotification 发送的
  • NSNotificationCenter-最好用于操作
  • 关于ios - 有没有更好的方法可以从托管 View Controller 中调用托管 View Controller 中的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16084173/

    10-13 07:17