app想要主動退出,不通過按Home鍵,該怎麼做?
1: exit(0);
此方法可能已被蘋果禁用,不行的話可以采用下面的方法;
2 [ self performSelector : @selector (aMethodNotExist) withObject : nil ]; 調用一個不存在的方法,引發程式異常退出;
3: abort (); 引發不正常程序的終止。
因為調用abort()而終止,那麼是因為某些條件成立,而使用者不得不作出終止目前程序的決定(參考assert()),abort()行為本身并不異常,如果使用者調用了,那麼程序就終止,完全是預期的行為。原理上來說,abort通過給自己發送SIGABRT信号,然後kernel會殺掉自己,并coredump。但是,如果使用者重新定義了SIGABRT信号的行為呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
結果是,會列印"catch signal",然後還是coredump了。原因是:abort()函數裡面先給自己發送SIGABRT保證handler執行,然後再重新注冊了SIGABRT,會修改成預設行為,再次給自己發送SIGABRT,保證執行預設行為,coredump。同時,還會flush所有打開的檔案,然後關閉掉。