在prepareForSegue中执行代码所花费的时间比在viewWillAppear结束时花费的时间长

时间:2015-06-30 04:43:14

标签: ios swift uiviewcontroller

我有两个UIViewController。我通过在第一个中使用segue来调用第二个。以下是我在第一个控制器的prepareForSegue方法中使用的一些代码,用于检查执行...some code的时间:

let start = NSDate()
userDefaults.setObject(start, forKey: "startDate")

...some code

let end = NSDate()
let timeSpentInSegue = end.timeIntervalSinceDate(start) * 1000
println("time Spent In Segue : \(timeSpentInSegue)")

在我的第二个UIViewController中,在viewWillAppear方法中,我刚刚写道:

let startDate = userDefaults.objectForKey("startDate") as! NSDate
let now = NSDate()
println("appeared in: \(now.timeIntervalSinceDate(startDate))")

startDate与我在第一个UIViewController的segue中使用的相同。

当我从我的app中的第一个控制器转到第二个控制器时,这是我在控制台输出中得到的:

time Spent In Segue : 0.97203254699707
appeared in: 0.0576500296592712

我不明白为什么我花在segue上的时间比花在" segue +加载第二个视图控制器"上的时间多。它没有意义。

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

这是因为在segue期间,viewWillAppear几乎立即被调用,以便它可以在它出现之前设置你的下一个视图。这样,当segue结束时,下一个屏幕上的元素不会“弹出”以查看。

尝试运行您在viewWillAppearviewDidAppear放置的代码。

答案 1 :(得分:1)

两个主要原因是:

  1. 您正在创建,初始化和设置的一些属性 第一个控制器中的第二个控制器,因此在第一个计数器
  2. 中计算了第二个视图控制器创建的时间
  3. UIViewController的“生命周期”为ViewDidLoadViewWillAppearViewDidAppear。因此,请尝试衡量从ViewDidLoadViewDidAppear
  4. 的时间

    注意:总时间消耗不是两者的组合,因为在创建对象时会调用ViewDidLoad,因此两个定时器将并行运行一段时间,因为您正在使用{{1你将能够真正看到两者的重叠。