一.啓動閃退
1.老版機型 或者老版系統 測試力度沒有覆蓋多個機型,多個系統版本
解決辦法: 公司提供一套測試機,全面測試,提高用戶體驗,防止用戶流失
2.項目中使用的第三方庫已經不是蘋果官方的審覈門檻,
現象 : 新ios上可以正常使用,但是老版本ios上秒退 最常見原因系統動態鏈接庫或者framework 無法找到
解決辦法:開發人員發現這個問題後升級程序,或由用戶自行升級其操作系統。
3.系統升級,用戶數據丟失
出現原因:程序在升級時,修改了本地存儲的數據結構,但是對用戶既存的舊數據沒有做好升級,結果導致初始化時因爲無法正確讀取用戶數據而秒退。這類問題通常只需刪除程序後重新安裝一遍就能解決。但缺點是
用戶的既存數據會丟失——就算有備份可能也無濟於事,因爲備份下來的舊數據還是無法被正確升級。
解決辦法:如果舊數據非常重要,那麼就需要聯繫開發人員要求其進行程序修正了。
4.ios系統升級,程序調用某個功能閃退
出現原因:是開發時用到了只有新版操作系統才支持的某個方法,而又沒有對該方法是否存在於老系統中做出判斷
5.內存不足,導致程序崩潰
總結:啓動秒退原因:不兼容老手機,老系統; 使用的第三方庫已過期; app版本或者後臺升級造成用戶數據丟失;
ios系統升級,導致之前的調用不可用;內存不足導致閃退
二.程序崩潰導致閃退
1.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。---------------------->沒數據會崩潰,數據錯誤會崩潰。
2.點擊某個模塊或者某個功能按鈕,進行頁面跳轉,或者獲取數據。---------------------->業務邏輯處理不當會導致崩潰。
3.點擊某個模塊或者某個功能按鈕,直接導致崩潰:編輯代碼時無報錯,編譯時出錯。---------------------->代碼邏輯錯誤,或者存在閃退符號的代碼。
4.某對象無法解析每個方法,該方法沒有實現。
5.Bundle中加載不存在的資源。
=========================================程序崩潰的解決辦法==========================================
一:寫個方法打印崩潰日誌
程序出現異常,要獲得出錯的原因,測試時可以通過打印崩潰信息來查看,上線後,要把用戶的崩潰日誌文件上傳到服務器,以待處理。
1. 在程序啓動時加上一個異常捕獲監聽,用來處理程序崩潰時的回調動作。
NSSetUncaughtExceptionHandler
(&UncaughtExceptionHandler);
2. 實現自己的處理函數
void
UncaughtExceptionHandler(
NSException
*exception) {
NSArray
*arr = [exception callStackSymbols];
//得到當前調用棧信息
NSString
*reason = [exception reason];
//非常重要,就是崩潰的原因
NSString
*name = [exception name];
//異常類型
//打印錯誤信息:
NSLog
(@
"exception type : %@ \n crash reason : %@ \n call stack info : %@"
, name, reason, arr);
}