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

2024-05-29

考虑以下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 应用程序(包括 Apple 提供的几个示例项目)中,线程永远不会退出UIApplicationMain()以及中的任何剩余代码main()永远不会被执行。这是预期的行为吗?

我已经验证了之后的陈述UIApplicationMain()切勿通过使用调试器单步执行代码来运行。当用户停止应用程序时(例如,通过点击“Home”按钮),生成的堆栈跟踪显示:[UIApplication _terminateWithStatus:]最终被调用。该函数调用您的应用程序委托applicationWillTerminate:方法。一旦完成,[UIApplication _terminateWithStatus:]似乎杀死/退出线程。

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


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

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

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

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

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

感谢大家的投入和集思广益!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 iPhone 应用程序的 main() 函数没有机会完成? 的相关文章

  • 对于多个人脸,CIFaceFeature TrackingID 始终相同

    我想在我的项目中检测多张面孔 因此我打算使用 CIFaceFure 的trackingID属性来跟踪面部 但我发现每次每张脸的情况都是一样的 所以我的问题是 当视频帧中存在多张脸时 如何唯一地识别一张脸 我不想识别脸部以供以后仅检测当前视频
  • 如何在 iOS 8 中强制视图控制器方向?

    在 iOS 8 之前 我们结合使用以下代码支持的接口方向 and 应该自动旋转委托方法强制应用程序定向到任何特定方向 我使用下面的代码片段以编程方式将应用程序旋转到所需的方向 首先 我正在更改状态栏方向 然后 只需呈现并立即关闭模态视图即可
  • 使用 Objective-C 或任何 Cocoa API 以编程方式在 Mac OS 上创建新用户? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何检测 UILabel 特定部分(子字符串)上的点击?

    我是 iOS 开发新手 我不知道这个问题是否已经被问过 我尝试在 stackoverflow 上搜索解决方案 但没有得到任何结果 问题 我有一个UILabel called myLabel与文字 点击此处继续 现在的问题是我想在用户仅点击
  • 以编程方式在 Swift 中实现尾随和前导约束 (NSLayoutConstraints)

    我正在从 xib 添加一个视图到我的 ViewController 中 然后我将其限制真正适合它 override func viewDidAppear animated Bool super viewDidAppear animated
  • 在 Objective-c 中获取对象名称

    假设我有一个 Foo 类和该类 myFoo 的一个实例 Foo myFoo 是否有任何方法 dispalyFooObjectName 可以显示对象的名称 例如 NSLog i was called from s myFoo dispalyF
  • 我们可以传递一个参数来查看某个类中其他类的加载情况或视图将出现吗

    抱歉 如果这不是标准问题 但现在您的解决方案可以帮助我 在我的应用程序中 我有两个类 ClassA and ClassB ClassB其中有一个表视图 我正在使用查询来填充表视图ClassB 但是我必须查询的列名是我从中得到的ClassA
  • 在 uiwebview 中使用 javascript 将样式应用于文本范围

    我在 iPhone 上的 UIWebView 中将一些简单样式的文本显示为 html 它基本上是一系列段落 偶尔有强烈或强调的短语 在运行时 我需要将样式应用于文本范围 有一些类似的场景 其中之一是突出显示搜索结果 如果用户搜索了 某事 我
  • ASIHTTPRequest 登录页面

    我尝试制作一个 iPhone 应用程序 可以登录到使用 https 保护用户信息的 Web 应用程序 现在我陷入了登录页面 我不知道通过我的应用程序登录时如何检查用户网站中的真实帐户 即使我输入错误的帐户 我也只收到 200 的回复 这是我
  • 通过 SDK 访问 iPhone 的蓝牙功能?

    有没有办法从 iPhone SDK 使用蓝牙 我对涉及蓝牙的应用程序有一些很酷的想法 但我没有找到任何搜索结果 没有 您可以提交错误报告 但现在这只是一个遥远的愿望 了解如何使用 WiFi Bonjour 网络来实现您的想法
  • 计算两个坐标之间的距离和路线

    我有 2 个坐标 想做一些看似简单的事情 我想弄清楚 鉴于 1 坐标A 2 Core Location提供的课程 3 坐标B 下列 1 A 和 B 之间的距离 目前可以使用 distanceFromLocation 来完成 所以就可以了 2
  • AVAudioSessionManager availableInputs“未知为端口 iPhone 麦克风选择的数据源”

    我在控制台日志中注意到这个错误已经有一段时间了 虽然它不影响我的应用程序的执行 但我觉得它真的很烦人 于是 我开始追查这个错误是从哪里来的 事实证明 当我调用 availableInputs 时 NSArray inputs AVAudio
  • iPhone通讯录:如何获取仅包含电话号码的联系人列表?

    我想获取所有具有电话号码的 ABContacts 的列表 并且仅获取这些联系人 我不想显示任何仅包含电子邮件的联系人 Android 有一个名为 HAS PHNONE NUMBER 的字段 您可以查询该字段 但我没有在 iPhone 上看到
  • 钥匙串组访问权限可在我的现有应用程序之间共享数据

    我在 AppStore 上有很多 iOS 应用程序 现在 对于下一个版本的应用程序 我想为每个应用程序保留一段数据以在 KeyChain 中共享 据我所知 我需要在 Apple 的 KeychainItemWrapper 类中提供相同的 K
  • 动态创建的标签被覆盖

    我正在开发一个应用程序 其中我在一个函数中动态添加了 5 个标签 当我回想起相同的函数时 尽管在每次创建时释放了标签 但先前创建的标签上的标签都会被覆盖 for int i 1 i lt array count i CGRect lblfr
  • AVAssetWriter 不适用于音频

    我正在尝试让音频与 iOS 应用程序的视频一起使用 视频很好 文件中没有录制任何音频 我的 iPhone 扬声器可以工作 这是初始化设置 session AVCaptureSession alloc init menu gt session
  • 如何为所有导航控制器和视图控制器设置自定义导航栏(标题 + titleView)?

    我有一个选项卡式应用程序 选项卡中有导航控制器 其中有视图控制器 它们都使用相同的导航控制器导航栏 后退按钮 徽标图像 目前 我将此代码放置在每个视图控制器中 void viewDidLoad super viewDidLoad self
  • 如何修复 iPhone 项目“失败的协同设计验证”?

    昨晚 iPhone项目完美搭建 今天早上我安装了XCode 3 2 3 in a separate文件夹 当我在旧版本中打开相同的项目时XCode 3 2 2并重新构建了该项目 我收到这个警告 应用程序协同设计失败 确认 签名是 无效 或者
  • 动画完成后 CABasicAnimation 重置为初始值

    我正在旋转 CALayer 并尝试在动画完成后将其停止在最终位置 但动画完成后 它会重置到初始位置 xcode 文档明确指出动画不会更新属性的值 任何如何实现这一目标的建议 这就是答案 它是我的答案和克里希南的答案的结合 cabasican
  • 为什么 mp4 视频在 iPad 上可以正常播放,而在 iPhone 上却不行?

    我对这个问题很困惑 我有一个大型 H 264 mp4 视频文件库 需要在 iOS 上播放 最初 我只针对 iPad 但要求发生了变化 现在我需要包括 iPhone 但我注意到 我的 iPod Touch 与我的 iPad 具有完全相同的操作

随机推荐

  • 为 Angular 2 配置history.pushState

    我的 Angular 2 应用程序使用默认值HTML 5 history pushState https developer mozilla org en US docs Web API History API Adding and mod
  • 在从 Postgres 9.4 到 Greenplum 的数据迁移过程中,我应该如何处理我的 UNIQUE 约束

    当我执行以下 sql 它包含在由 生成的 sql 文件中 pg dumpGreenplum 中的 Postgres9 4 CREATE TABLE public trm concept pid int8 NOT NULL code varc
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • 从极坐标中的日期时间列检索日期

    目前 当我尝试从极坐标日期时间列中检索日期时 我必须写一些东西 如同 df pl DataFrame time dt datetime now df df select pl col pl col time apply lambda x x
  • xQuery LIKE 运算符?

    有没有办法以与 SQL 相同的方式使用 XQuery 执行 LIKE 操作 我不想构造一些 startswith endswith 和 contains 表达式 我想要实现的目标的示例 for x in user where x first
  • 何时选择受控异常和非受控异常

    在Java 或任何其他具有检查异常的语言 中 当创建自己的异常类时 如何决定它是否应该检查或不检查 我的直觉是 如果调用者能够以某种有效的方式恢复 则需要检查异常 而对于不可恢复的情况 则需要检查异常 但我对其他人的想法感兴趣 只要您了解何
  • 在 Spring Boot 应用程序中启用 Spring 框架的日志记录

    我已经使用 spring boot 创建了简单的网络应用程序 我想为 springframework 包启用调试日志 我知道如何在普通 spring mvc 项目中启用日志记录 我在这里尝试了相同的操作 但它不起作用 有人可以帮我吗 我的
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • 在matplotlib中获取数据坐标中的bbox

    我有bbox of a matplotlib patches Rectangle显示坐标中的对象 条形图中的条形 如下所示 Bbox array 0 0 1 1 但我希望不是在显示坐标中而是在数据坐标中 我很确定这需要进行转变 这样做的方法
  • iOS 何时清理本地应用程序 ./tmp 目录?

    iOS什么时候清理本地应用程序 tmp目录 请注意 这不是一个骗局这个问题 https stackoverflow com questions 3593900 iphone storage in tmp directory 我问的是应用程序
  • 获取局部变量

    当从已部署的应用程序获取堆栈跟踪作为错误报告时 获取实际变量值以重建抛出异常之前的系统状态也会很有帮助 类似的事情在 Java 中可行吗 如何才能做到这一点 干杯 最大限度 我很确定您无法获取堆栈跟踪中的局部变量 因为输出是从 StackT
  • 如何在 Struts 2 中连接 2 个动作类变量?

    我的动作类中有 2 个变量 id1 and id2 加入了一个 它们用作地图键 我无法使用此代码检索地图值
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • 没有将“exportAs”设置为“ngbDatepicker”的指令

    I m using angular 4 i was trying to add datepicker while i m using datepicker popup html I m getting error as given belo
  • 如何正确使用android.test.ServiceTestCase?

    我的应用程序是在 system app 中运行的服务 com abc def MyApp 尝试为其编写单元测试时 我在运行时在 logcat 中收到此错误 I TestGrouping 5647 TestCase class com abc
  • 使用 Scanner 解析逗号分隔值:不匹配异常

    我意识到有关该主题的主题有很多 但我无法找到一个可以回应此案例的主题 我有多行输入 其格式无法编辑 例如 我有 1 0 55 0 20 0 05 1 2 3 正如您所知 第一个是一个整数 并且不被任何东西分隔 接下来 我们有 3 个双精度数
  • 即发即忘,使用 Task.Run 或仅调用异步方法而不等待

    一般来说 特别是当涉及到库或控制台应用程序时 为了解雇并忘记async方法 是不是更好地调用async方法无await荷兰国际集团或使用Task Run 基本上 public static void Main Doing DoSomethi
  • jQuery 绑定效率

    我在数千个元素和输入上使用多个 jQuery 绑定时遇到加载速度问题 是否有更有效的方法来执行此操作 该网站能够通过ajax调用在产品列表之间切换 页面无法刷新 有些列表有 10 个项目 有些有 100 个 有些超过 2000 个 当我开始
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV