天天看點

代碼退出IOS中Appapp想要主動退出,不通過按Home鍵,該怎麼做?

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

#include<stdlib.h>

#include<signal.h>

#include<stdio.h>

#include<assert.h>

voidhandler(inti)

{

printf

(

"catchsignal\n"

);

}

intmain()

{

signal

(SIGABRT,handler);

abort

();

while

(1);

return0;

}

結果是,會列印"catch signal",然後還是coredump了。原因是:abort()函數裡面先給自己發送SIGABRT保證handler執行,然後再重新注冊了SIGABRT,會修改成預設行為,再次給自己發送SIGABRT,保證執行預設行為,coredump。同時,還會flush所有打開的檔案,然後關閉掉。

繼續閱讀