我正在调试一个iPhone应用程序(Xcode,Objective C++)的启动速度问题。这是一个基于标签栏的应用程序,有三个标签页。这三个标签页在一个NIB中加载 - 大约有20个对象。
第一轮重要的初始化发生在第一个标签的视图控制器的viewDidLoad处理程序中。然而,在main()和该方法开始时间之间需要大约1秒钟 - 大约占总加载时间的2/3。问题是 - 在那段时间内发生了什么,并且我如何调查它(除了逐步通过反汇编代码)?据我所知,在两个时刻之间没有我的代码 - 延迟完全发生在系统代码中。
也许有一些工具可以给我每个函数的时间分布情况?
捆绑包总共大约4 MB,但我将最大的文件(约3.5 MB)加载到applicationDidFinishLaunching处理程序中。从捆绑包中删除该文件并注释掉相关代码对于1秒延迟毫无作用。
更新:确实存在调试干扰。如果我在设备上运行它并观看控制台,则启动时间会显着缩短,并且延迟比例-系统代码与我的代码-也会被扭曲。但仍然存在明显的延迟,即在main和viewDidLoad之间,它约占总加载时间的50%。
顺便说一句,从捆绑包中完全将一个较大的文件加载到内存中的所有方法中,最快的方法是直接内存映射(使用POSIX mmap())。
第一轮重要的初始化发生在第一个标签的视图控制器的viewDidLoad处理程序中。然而,在main()和该方法开始时间之间需要大约1秒钟 - 大约占总加载时间的2/3。问题是 - 在那段时间内发生了什么,并且我如何调查它(除了逐步通过反汇编代码)?据我所知,在两个时刻之间没有我的代码 - 延迟完全发生在系统代码中。
也许有一些工具可以给我每个函数的时间分布情况?
捆绑包总共大约4 MB,但我将最大的文件(约3.5 MB)加载到applicationDidFinishLaunching处理程序中。从捆绑包中删除该文件并注释掉相关代码对于1秒延迟毫无作用。
更新:确实存在调试干扰。如果我在设备上运行它并观看控制台,则启动时间会显着缩短,并且延迟比例-系统代码与我的代码-也会被扭曲。但仍然存在明显的延迟,即在main和viewDidLoad之间,它约占总加载时间的50%。
顺便说一句,从捆绑包中完全将一个较大的文件加载到内存中的所有方法中,最快的方法是直接内存映射(使用POSIX mmap())。