iOS-中app启动闪退的缘由

这种状况应和所谓的内存不足关系不大,不多有程序会在初始化时载入大量内容致使崩溃,而且这类问题也很容易在开发阶段被发现,因此内存不足形成秒退的可能性低(内存不足退,一般是程序用了一段时间,切换了几个画面之后发生的)。  

  并且秒退是发生在程序刚刚启动的时候,在开发、苹果审核阶段都没有被发现的最大可能性就是,这个问题只会发生在老版系统、老版机型上。  

  对于不少开发者(尤为是我的开发者),进行全部 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 上都会存在,若是是因为这类问题形成的秒退一般都能在测试和审核阶段被发现,所以并不常见。数据结构

相关文章
相关标签/搜索