objective-c - iOS 中的 ViewDidLoad 和 UINavigationController?

标签 objective-c ios xcode model-view-controller

我有一个基于 UINavigationController 的应用程序。有一个菜单屏幕,其中的按钮可以连接(推到导航 Controller 堆栈上)到其他 9 个“子屏幕”之一。这些子屏幕都不会与任何其他屏幕连续。当用户完成在“子屏幕”上输入数据时,他们可以按下完成按钮,该按钮将弹回原始菜单屏幕。 (如果您很难想象这一点,请想象一棵像 Storyboard一样的树,其中有一个根 ViewController,然后是 9 个叶 ViewController)。

好的,通过这个设置,我有一些关于 viewDidLoad 工作原理的问题。

~ 首先,每次我们转换到子屏幕时都应该调用 viewDidLoad 。例如,假设我从菜单屏幕转到子屏幕“B”,返回菜单屏幕,然后返回子屏幕“B”。 B 的 viewDidLoad 方法应该被调用两次吗?如果不是,为什么我的会被调用两次?

~ 其次,假设每次都会被调用,如果我有很多长操作需要每个子屏幕执行一次,我该怎么办?我应该把它们放在哪里(如果我把它们放在 viewDidLoad 中,如果用户不断在此页面和菜单之间来回移动,它会发生多次)?

最佳答案

回答您的问题:

  1. 是的,一般来说,每次将 B 的 viewDidLoad 方法推送到 UINavigationController 的堆栈时都应该调用它。这是因为每次 B 从堆栈中弹出时,它通常都会被释放,并且每次访问 B 时都会创建 B 的新实例。

  2. 处理这种情况的方法有很多种。如果不确切地了解您正在尝试做什么,就很难判断什么是适合您的。一种方法是创建 singleton object负责处理。这可能比在 UIViewController 中处理它更好的原因是单例可以在应用程序的整个生命周期中生存,而 UIViewController 通常具有相对较短的生命周期。单例对象只需创建一次,它们就可以管理您在应用程序的生命周期中需要保留的任何操作和数据。

关于objective-c - iOS 中的 ViewDidLoad 和 UINavigationController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125445/

相关文章:

xcode - 使用 xcodebuild 构建时出错

ios - 在函数 swift 中使用 presentviewcontroller

ios - 我有两个文本字段,我需要在 IOS 中打开日期选择器和另一个时间选择器

ios - NSMutableArray 没有像预期的那样改变事件

ios - 今天扩展 "Unable To Load"

ios - Swift - URL 数组不起作用

iphone - 向 UITableView 上的 UIImageView 添加阴影会降低性能……为什么?

ios - XCode 6.4 链接器命令失败,退出代码为 1(使用 -v 查看调用)

ios - 在 Swift 3 中使用 UIApplication.sharedApplication().sendAction 发送匿名操作

ios - 补充意见未被删除