在启动 iPhone 应用程序的 main() 函数之前系统会做什么?

发布于 2024-09-02 18:57:41 字数 422 浏览 1 评论 0原文

我的应用程序加载时间太长。 因此,我在 main() 函数中放置了一个 NSLog,如下所示,以测量从一开始的加载时间:

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() 函数之前发生了什么?

My app takes too much time to loading.
So I put a NSLog in main() function like this to measure loading time from first:

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

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

But, the log displayed at really later time.
Default.png displayed about 5 seconds, all loading process completed in 1~2 seconds after log appeared.

What's happening before executing main() function on iPhone app?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

野鹿林 2024-09-09 18:57:41

二进制文件的入口点不是 main(),而是 start。对于大多数使用 gcc 编译的二进制文件都是如此。当 C++ 中有 静态变量构造函数 ,或具有 __attribute__((constructor)) 属性 的函数 或 +load 方法,它们将在 main() 之前运行。

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

Default.png 由 SpringBoard 显示,不受您的应用程序控制。因此,在显示 Default.png 和代码实际运行之间可能存在时间延迟。

然而,这些行动速度很快。延迟更可能是由于附加到远程 gdb 和 Xcode 而引起的。

The entry point of a binary is not main(), but start. This is true for most binaries compiled with gcc. When there are static variable constructors in C++, or functions with __attribute__((constructor)) attribute, or +load methods, they will be run before main().

Some code will run even before start, because of dynamic linking. The dyld is responsible for this. All undefined external symbols are filled in at this point. And of course, the initializers of these libraries will execute.

The Default.png is shown by SpringBoard, and is not controlled by your app. Thus there can be a time delay between the Default.png is shown, and code is actually running.

These actions, however, are fast. The delay is more likely introduced by attaching to the remote gdb and Xcode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文