1、内存泄漏
出现场景: 在app启动首页检测网络权限,没打开网络权限使用自定义弹框弹出提示,自定义弹框的弹出需要一个vc去present,这个vc传入的是首页,导致退出登录时,首页无法释放。
一般在对象方法中,使用block都会[weak self],但是类方法就没注意,这是传入block中的参数也要加weak修复,不然内存泄漏。
2、启动超时
出现场景:
最近的app版本会偶尔出现无法启动,一只停在启动页,过一段时间后闪退会桌面,iPhone 8 Plus尤为频繁。
这个bug真的找了好久,各种推测和验证,耗费了快两天时间,才找到问题原因。
之前过了那么多个版本都没出现这个问题,于是寻找先版本和之前版本之间的不同,发现最近两个版本引入了安全方面的措施,那些各种key、host地址等的都不能直接写在代码里。于是引入了cocoapods-keys这个插件,把所有那些key等放到Cocoapodkey.sh这个脚本里,拖入命令行执行后,会生成一个oc类,头文件里有所有的key,项目里调用的时候直接创建这个类的实例,访问里面的key就行了。本来这个不应该有问题的,正常情况也没问题,就是偶尔就会出问题。所以推测就是因为这个Cocoapodkey对那些key的加密导致了系统偶尔抽风。
解决方案一: 不使用Cocoapodkey,那些用到的key还是直接写到代码里,直接硬编码。显然安全组不会同意。
解决方案二: 检查代码发现,网络请求、第三方登录等的一些地方都会访问到Cocoapodkey里面的key,查看其.m文件的实现,发现加密用了一个很长的加密字符串,可能是使用这个字符串加密的时候阻塞了线程,导致无法启动app。于是把最开始的几个网络请求放到子线程里调用,这样网络请求使用到Cocoapodkey里的字段就是在子线程里去读取加密的,就不会堵塞线程,导致启动超时。还有一些其他的网络请求,以及第三方登录的SDK页挪到了主页加载完之后才执行。改完之后,果然没在出现过启动超时,所以断定就是Cocoapodkey的锅。
原因: app启动超时,被系统的watch dog终止。错误代码: 0x8badf00d。
网友评论