欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解编程中的退出函数:exit(1),abort和assert(0)

最编程 2024-01-15 17:13:29
...

先来看一下程序的死亡方式:

程序的死亡大致有三种:自然死亡,即无疾而终,通常就是main()中的一个return 0;自杀,当程序发现自己再活下去已经没有任何意义时,通常会选择自杀。当然,这种自杀也是一种请求式的自杀,即请求OS将自己毙掉。有三种方式:void exit(int status)void abort(void)assert(condition)。他杀,同现实不同的是,程序家族中的他杀行径往往是由自己至亲完成的,通常这个至亲就是他的生身父亲(还是母亲?)。语言本身并没有提供他杀的凶器,这些凶器往往是由OS直接或者间接(通过一些进程库,如pthread)提供的。 自然死是最完美的结局,他杀是我们最不愿意看到的,自杀虽是迫不得已,但主动权毕竟还是由程序自己掌控的;abort被调用时,程序将直接退出,任何对象的析构函数都不会调用

介绍:

abort: 这是默认的程序结束函数,这种方式可能会或可能不会以刷新与关闭打开的文件
或删除临时文件,这与你的设计有关.
exit: 附加了关闭打开文件与返回状态码给执行环境,并调用你用atexit注册的返回函数
exit和abort都是终止程序执行退出的处理函数,其中exit是正常退出,abort是异常退出,退出时会输出错误信息,然后再调用exit退出。
用户体验来说,exit就像是程序崩溃了,直接退出程序。abort就像是点击了home键,有过渡动画,一般我们在使用的时候会选择abort();
但是苹果审核好像是不支持这样去操,会造成很不好的用户体验,有很大的机率会拒绝审核,但是查看官方文档用到exit(0);
警告:
不要使用exit函数,调用exit会让用户感觉程序崩溃了,不会有按Home键返回时的平滑过渡和动画效果;另外,使用exit可能会丢失数据,因为调用exit并不会调用-applicationWillTerminate:方法和UIApplicationDelegate方法;
方法:
在plist添加屬性Application does not run in background = YES,调用exit(0)

assert(1)为oc中的宏,只在debug模式下有用,当条件成立时,程序不会终止掉;当条件不成立时,程序终止。

so,oc程序中建议用assert(condition)函数。

推荐阅读