-
強制退出有四種:
- exit();
- abort();
- assert();
- 主動制造一個崩潰;
-
exit()
1.附加了關閉打開文件與返回狀態碼給執行環境,並調用你用atexit注冊的返回函數;
2.警告:不要使用exit函數,調用exit會讓用戶感覺程序崩潰了,不會有按Home鍵返回時的平滑過渡和動畫效果;
3.另外,使用exit可能會丟失數據,因為調用exit並不會調用-applicationWillTerminate:方法和UIApplicationDelegate方法;- (void)exitApplication { [UIView beginAnimations:@"exitApplication" context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationDelegate:self]; [UIView setAnimationTransition:UIViewAnimationCurveEaseOut forView:self.window cache:NO]; [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)]; self.window.bounds = CGRectMake(0, 0, 0, 0); [UIView commitAnimations]; } - (void)animationFinished:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { if ([animationID compare:@"exitApplication"] == 0) { exit(0); } } exit(1)是異常退出; exit(0)是正常退出;
-
abort()
1.這是默認的程序結束函數,這種方式可能會或可能不會以刷新與關閉打開的文件
或刪除臨時文件,這與你的設計有關。
2.abort就像是點擊了home鍵有過渡動畫,使用的時建議選擇abort();abort();
-
assert()
1.assert(1)為oc中的宏,只在debug模式下有用,當條件成立時,程序不會終止掉;當條件不成立時,程序終止。
2.oc程序中建議用assert(condition)函數,推薦使用assert宏;
3.方法未實現完,放個ASSERT(0)調試運行時執行到此為報錯中斷,好知道成員函數還沒寫完。
4.另一種情況是預防性的錯誤檢查,在認為不可能的執行到的情況下加一句ASSERT(0),如果運行到此,代碼邏輯或條件就可能有問題。assert(0); //作用是現計算表達式expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,然后通過調用 abort 來終止程序運行 assert(1); //為oc中的宏,只在debug模式下有用,當條件成立時,程序不會終止掉;當條件不成立時,程序終止。
-
主動制造一個崩潰
這種方式自然是不推薦的啦!如果你有崩潰日志收集功能則會產生誤報,有正規途徑還是走正規途徑吧~~~~
[[NSArray array] objectAtIndex:5];