iOS笔记之乱开脑洞(Objective-C)

2018.4.3
文中诸多内容属直接转载,若原作者要求删除,请联系我,立删。

1.应用自杀

原作者:Mr.陳
原文:iOS 强制退出程序APP代码

1.示例代码
- (void)exitApplication {
    AppDelegate *app = [UIApplication sharedApplication].delegate;
    UIWindow *window = app.window;
    [UIView animateWithDuration:1.0f animations:^{
        window.alpha = 0;
        window.frame = CGRectMake(0, window.bounds.size.width, 0, 0);
    } completion:^(BOOL finished) {
        exit(0);
    }];
}

2.程序中的exit(1)、abort()、assert(0);
先来看一下程序的死亡方式:
程序的死亡大致有三种:自然死亡,即无疾而终,通常就是main()中的一个return 0;自杀,当程序发现自己再活下去已经没有任何意义时,通常会选择自杀。当然,这种自杀也是一种请求式的自杀,即请求OS将自己毙掉。有三种方式:void exit(int status)和void abort(void)、assert(condition)。他杀,同现实不同的是,程序家族中的他杀行径往往是由自己至亲完成的,通常这个至亲就是他的生身父亲(还是母亲?)。语言本身并没有提供他杀的凶器,这些凶器往往是由OS直接或者间接(通过一些进程库,如pthread)提供的。 自然死是最完美的结局,他杀是我们最不愿意看到的,自杀虽是迫不得已,但主动权毕竟还是由程序自己掌控的;abort被调用时,程序将直接退出,任何对象的析构函数都不会调用
介绍:
abort: 这是默认的程序结束函数,这种方式可能会或可能不会以刷新与关闭打开的文件
或删除临时文件,这与你的设计有关.
exit: 附加了关闭打开文件与返回状态码给执行环境,并调用你用atexit注册的返回函数
assert(1)为oc中的宏,只在debug模式下有用,当条件成立时,程序不会终止掉;当条件不成立时,程序终止。
so,oc程序中建议用assert(condition)函数。

3.选择
Q:怎样用代码方式退出iOS程序
A:没有提供用于正常退出IOS应用的API。
在IOS中,用户点击Home键来关闭应用。你的应用应该符合以下条件:它不能自行调用方法,而应采取措施与用户交互,表明问题的性质和应用可能会采取的行为,比如打开WIFI,使用定位服务等供用户选择确定使用;
警告:不要使用exit函数,调用exit会让用户感觉程序崩溃了,不会有按Home键返回时的平滑过渡和动画效果;另外,使用exit可能会丢失数据,因为调用exit并不会调用-applicationWillTerminate:方法和UIApplicationDelegate方法;
如果在开发或者测试中确实需要强行终止程序时,推荐使用abort 函数和assert宏;

实际代码测验结果,实现方式共4种(原创),

/* debug状态下依旧可以强行退出,且会在退出前调用方法
 - (void)applicationWillTerminate:(UIApplication *)application */
if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminateWithSuccess)]){
    [[UIApplication sharedApplication] performSelector:@selector(terminateWithSuccess)];
}

/* debug状态下依旧可以强行退出,但不会调用任何方法 */
exit(1); 或 exit(0); 

/* debug状态下会断点,效果类似数组越界等会造成应用闪退的Bug */
assert(0); 或 abort();
2.其它脑洞(未完待续...)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,695评论 25 709
  • 曾经有一个朋友问我说 如果有一天 我和你认识的一个人吵架了 那么你会站在哪一边?还没等我回答,他就说(当时他喝了酒...
    c_3e47阅读 1,760评论 0 1
  • 2017.9.13 起的早,完成的东西就多,听了两节PPT,学到了新的内容。 英语听力半小时,趣配音完成两个任务。...
    灸灸微笑阅读 1,315评论 0 0
  • 此时正好, 留点时间, 给世间往事, 被温柔念起。 是的, 留点时间, 看过云, 看过水, 再看看, 云青青欲雨,...
    梓哲99阅读 4,881评论 1 1

友情链接更多精彩内容