gpt4 book ai didi

objective-c - 为什么 iPhone 应用程序的 main() 函数没有机会完成?

转载 作者:太空狗 更新时间:2023-10-30 03:27:35 26 4
gpt4 key购买 nike

考虑以下 main() 方法,您会发现大多数 iPhone 应用程序:

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

在我用这些(包括苹果提供的几个示例项目)在模拟器中运行的每个 iPhone 应用程序中,线程永远不会退出 UIApplicationMain()main( ) 永远不会执行。这是预期的行为吗?

我已经通过使用调试器单步执行代码验证了 UIApplicationMain() 之后的语句从未运行过。当用户停止应用程序时(例如,通过点击“主页”按钮),生成的堆栈跟踪显示 [UIApplication _terminateWithStatus:] 最终被调用。此函数调用您的应用程序委托(delegate)的 applicationWillTerminate: 方法。完成后,[UIApplication _terminateWithStatus:] 似乎终止/退出线程。

有人可以确认这就是 main() 应该如何工作,或者至少在他们的机器上确认相同的行为吗?

最佳答案

最初的问题是:“为什么 iPhone 应用程序的 main() 函数没有机会完成?

简短回答:因为 UIApplicationMain() 的编码使其永远不会返回。

在 Simulator 和设备上进行了几次测试,并要求另一位开发人员进行相同的测试后,我确认 UIApplicationMain 永远不会返回。当用户通过点击主页按钮正常终止应用程序时,程序最终会在一个名为 _terminateWithStatus 的未发布的 UIApplication 方法中终止。此方法调用 exit(0)。

此行为与 NSApplicationMain 函数(它是 UIApplicationMain 函数的 AppKit/Cocoa 版本)的行为相匹配。 NSApplicationMain() 的文档明确指出它永远不会返回。

我已向 Apple 提交了一个错误 (6600198),要求更正官方文档(和 main.m 的 Xcode 模板)以声明 UIApplicationMain() 永远不会返回。虽然这不是功能性问题,但当前的模板和文档具有误导性。

感谢大家的所有意见和头脑 Storm !

关于objective-c - 为什么 iPhone 应用程序的 main() 函数没有机会完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/559482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com