一.启动闪退
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);
}