【问题标题】:Application entry and call sequence when .ipa start up.ipa 启动时的应用程序入口和调用顺序
【发布时间】:2011-11-10 02:37:52
【问题描述】:

我最近从 C 编程迁移到使用 Xcode 进行 iphone 开发。 IDE 似乎隐藏了很多琐碎的事情,我很好奇幕后发生了什么。

我在我的项目中找到了一个名为 main.m 的文件。在这个函数中,UIApplicationMain(argc, argv, nil, nil); 被调用。我的问题是UIApplicationMain 将完成哪些任务?我可以进入这个函数来跟踪它的执行吗?

任何提示将不胜感激。

谢谢和最好的问候。

【问题讨论】:

    标签: iphone ios ipad ios4 ios5


    【解决方案1】:

    iOS Cocoa Touch 应用程序使用事件驱动范例,而不是严格的顺序过程代码。

    UIApplicationMain() 告诉 OS 和 Objective C 运行时进行设置(plist'ed 默认值、主 nib、运行循环等),然后让主运行循环开始分派到应用程序中的方法。在所有(初始化/加载/事件处理)方法的开头放置断点,以查看操作系统首先开始调用的内容。

    操作系统做了一大堆你无法涉足的事情。您必须等到它准备好并准备好在您的应用中调用方法。

    【讨论】:

    • 那么对ipa调试有什么建议吗?我几乎快要发疯了,这与 C 编程完全不同。:)
    • 很多断点,直到你弄清楚事情(主要是委托方法)被调用的顺序。调试版本中可能有很多 NSLog。
    【解决方案2】:

    UIApplicationMain 是 Cocoa 应用程序的入口点。它设置应用程序的主要应用程序类及其委托,并开始运行事件循环。它不会返回。

    来自the documentation:

    此函数从主体实例化应用程序对象 类和实例化给定类的委托(如果有的话) 并设置应用程序的委托。它还设置了主要 事件循环,包括应用程序的运行循环,并开始 处理事件。如果应用程序的 Info.plist 文件指定了一个 要加载的主 nib 文件,包括 NSMainNibFile 键和 值的有效 nib 文件名,此函数加载该 nib 文件。

    您并不想深入了解该特定函数的内容,因为只有一大堆二进制指令可供查看,不会有启发性。但是考虑它的方式是,它是整个应用程序的“容器”功能。一旦完成设置工作,它就会在运行循环中开始事件处理,并在适当的时候调用您的代码。它将位于主线程上所有应用程序代码的调用堆栈的底部。

    查看此页面上的精彩图表,了解有关应用生命周期的更多信息,这些图表应该会为您提供一些关于在您自己的代码中放置断点的位置以及如何调用它们的提示: http://www.codeproject.com/KB/iPhone/ApplicationLifeCycle.aspx

    【讨论】:

    • 感谢您的快速响应。 :)
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多