我有两个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 +加载第二个视图控制器"上的时间多。它没有意义。
有人可以向我解释一下吗?
答案 0 :(得分:1)
这是因为在segue期间,viewWillAppear
几乎立即被调用,以便它可以在它出现之前设置你的下一个视图。这样,当segue结束时,下一个屏幕上的元素不会“弹出”以查看。
尝试运行您在viewWillAppear
内viewDidAppear
放置的代码。
答案 1 :(得分:1)
两个主要原因是:
UIViewController
的“生命周期”为ViewDidLoad
,ViewWillAppear
,ViewDidAppear
。因此,请尝试衡量从ViewDidLoad
到ViewDidAppear
注意:总时间消耗不是两者的组合,因为在创建对象时会调用ViewDidLoad
,因此两个定时器将并行运行一段时间,因为您正在使用{{1你将能够真正看到两者的重叠。