這種狀況應和所謂的內存不足關係不大,不多有程序會在初始化時載入大量內容致使崩潰,而且這類問題也很容易在開發階段被發現,因此內存不足形成秒退的可能性低(內存不足退,一般是程序用了一段時間,切換了幾個畫面之後發生的)。
並且秒退是發生在程序剛剛啓動的時候,在開發、蘋果審覈階段都沒有被發現的最大可能性就是,這個問題只會發生在老版系統、老版機型上。
對於不少開發者(尤爲是我的開發者),進行全部 iOS 版本,全部 iOS 機型覆蓋測試是有難度的,蘋果審覈時也只是重點審覈該應用在新機器、新版本下的運行狀況,並不關注老系統。因此這也就是爲何會秒退的程序居然也能經過蘋果的審覈。
在新 iOS 上正常的應用,到了老版本 iOS 上秒退最多見緣由是系統動態連接庫或Framework沒法找到。這種狀況一般是因爲 App 引用了一個新版操做系統裏的動態庫(或者某動態庫的新版本)或只有新 iOS 支持的 Framework,而又沒有對老系統進行測試,因而當 App 運行在老系統上時便因爲找不到而秒退。解決辦法是等開發人員發現這個問題後升級程序,或由用戶自行升級其操做系統。
還有一種常見的秒退是程序在升級時,修改了本地存儲的數據結構,可是對用戶既存的舊數據沒有作好升級,結果致使初始化時由於沒法正確讀取用戶數據而秒退。這類問題一般只需刪除程序後從新安裝一遍就能解決。但缺點是用戶的既存數據會丟失——就算有備份可能也無濟於事,由於備份下來的舊數據仍是沒法被正確升級。若是舊數據很是重要,那麼就須要聯繫開發人員要求其進行程序修正了。
另外一種已經變得不那麼常見的秒退緣由是 App 的設置不正確。例如在編譯時沒有編譯 ARMv6 的版本,可是設置裏卻容許該 App 運行在 ARMv6 處理器的機器上(如:iPhone 1代,iPhone 3G,iPod touch 一、2代和3代8G版)。這個問題除了等開發人員升級外用戶本身沒什麼辦法解決。固然願意換臺新機器是最好的 ;) 這個問題目前已經可以在提交應用至 App Store 的時候被檢查出來了,所以從此應該不太常見了。
還有一類秒退或是用到 App 裏某個功能後必退的緣由,是開發時用到了只有新版操做系統才支持的某個方法,而又沒有對該方法是否存在於老系統中作出判斷。例如程序啓動時用到了 Game Center,而沒有判斷用戶的機器是否支持 Game Center,因而就秒退了。
主要的秒退狀況就是這麼幾個,這些都是以該 App 新版系統上能正常跑爲前提的。
諸如內存不足、BAD_ACCESS 這類問題一般無論在新舊 iOS 上都會存在,若是是因爲這類問題形成的秒退一般都能在測試和審覈階段被發現,所以並不常見。數據結構