2010-05-23 18 views
2

我的应用需要花费太多时间来加载。 所以我把的NSLog在main()函数像这样从第一测量装载时间:在启动iPhone应用程序的main()函数之前,系统会做什么?

int main(int argc, char *argv[]) 
{  
    NSLog(@"main"); 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

但是,在真正稍后显示的日志。 Default.png显示约5秒钟,所有加载过程在日志出现后1〜2秒内完成。

在iPhone应用程序上执行main()函数之前发生了什么?

回答

4

二进制的入口点不是main(),而是start。大多数使用gcc编译的二进制文件都是如此。当有static variable constructors in C++或功能__attribute__((constructor)) attribute+load methods时,它们将在main()之前运行。

由于动态链接,有些代码甚至会在start之前运行。 dyld负责这个。所有未定义的外部符号都在此处填入。当然,这些库的初始化程序将执行。

Default.png由SpringBoard显示,不受您的应用程序控制。因此可以在Default.png之间出现时间延迟,并且代码实际上正在运行。

但是,这些操作很快。延迟更可能通过附加到远程gdb和Xcode引入。

+0

太酷了。谢谢! – Eonil 2010-05-23 12:26:23

相关问题