在實(shí)際應(yīng)用中很多人可能都有這樣的需求:就是在程序被殺死后,希望做一些處理,比如清除沙盒中緩存等,我最近剛好也有這樣的需求,由于我的App在本地保存了一些即時(shí)聊天的消息緩存在沙盒,希望程序被殺死后就清除這些緩存.
這時(shí)就需要用到applicationWillTerminate方法了,我起初以為不管程序在前臺(tái)還是后臺(tái),直接在該方法內(nèi)清除沙盒緩存就可以了.但是進(jìn)行測(cè)試發(fā)現(xiàn),這個(gè)方法只有程序在前臺(tái)的時(shí)候退出才會(huì)調(diào)用,而如果你的程序是在后臺(tái),這時(shí)候你雙擊Home鍵來(lái)殺死進(jìn)程,那么applicationWillTerminate就不會(huì)再調(diào)用了.查看了UIApplication中所有的代理方法,也只有這個(gè)方法是退出程序被調(diào)用的,這個(gè)時(shí)候腫么辦?
查找資料并經(jīng)過(guò)測(cè)試后,發(fā)現(xiàn)可以利用applicationDidEnterBackground方法來(lái)配合解決后臺(tái)退出的問(wèn)題,方法如下:

只要在applicationDidEnterBackground里面寫(xiě)上beginBackgroundTaskWithExpirationHandler這個(gè)block,這個(gè)block內(nèi)可以不用實(shí)現(xiàn)任何操作,此時(shí)無(wú)論你是在前臺(tái)還是后臺(tái)殺死程序都會(huì)去執(zhí)行applicationWillTerminate方法,這時(shí)在這個(gè)方法內(nèi)做清除沙盒緩存以及其它的操作才能確保萬(wàn)無(wú)一失.