计算在所有异步服务调用完成后加载窗口所需的时间

3
如何计算视图/窗口加载所需的时间?可以通过以下方式完成:
NSDate *startTime=[NSDate date];

//some code to load another window from winController

NSDate *endTime=[NSDate date];
NSTimeInterval diff = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Time to load is %f seconds.\n\n\n",diff);

但是它不会计算总共和准确的时间。为了加载一个窗口,然后在init和awakeFromNib中异步调用服务,加载自定义视图,填充表格等等,这些都分布在数十个类/控制器和许多方法中。
如果我使用上面的程序(如所示),当旋转器继续旋转并且服务调用正在进行时,endTime已经到达。
我可以通过观察时钟来检查它需要超过一分钟才能加载窗口,并准备好对其执行任何操作,但是diff被计算为0.5秒左右。
现在的问题是我无法更改整个项目的代码,但我可以在其中插入一些内容。
如何做到这一点,欢迎提出建议。

你需要获取进度指示器消失的确切时间,还是想了解是什么导致它加载时间过长? - A-Live
我需要从按钮点击到窗口准备好的实际时间差异。即使在进度指示器停止后,窗口仍然不接受任何事件。 - Anoop Vaidya
@H2CO3:窗口已经加载,但是幕后有很多异步服务调用正在进行。即使在异步调用完成之前,windowDidFinishLoading也会被执行。 - Anoop Vaidya
@AnoopVaidya 我的意思是,对于异步调用,你有完成处理程序,不是吗?把你的定时器代码放在那里。 - user529758
@AnoopVaidya 不是很对...也许是运行时黑客?钩取UIControl? - user529758
显示剩余2条评论
1个回答

0

我知道这有点晚了,不确定你是否还在寻找答案(但可能其他人正在寻找类似问题的解决方案)。但在这种情况下,您必须跟踪您的代码,即您需要知道哪个异步调用的回调最后被调用。这很容易追踪。我通常做的是非常常见和简单的,在这些回调中放置NSLog(%@"1")... NSLog(%@"any_number")。然后检查哪个最后被打印出来。这样,您可以将您的结束计时器代码放置在该回调中,并知道加载窗口需要多长时间。希望这能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接