如何有效降低APP的崩溃率?

本文详细探讨了如何降低APP的崩溃率,包括处理unrecognized selector crash、KVO crash、NSNotification crash、NSTimer crash等常见问题,通过方法转发、KVO管理、Notification监控和NSTimer优化等方式提升APP稳定性。
摘要由CSDN通过智能技术生成

作者: 张炫赫

作为一个资深的技术团队,app的性能是我们技术团队首要的任务,其中最主要的一项就是app的崩溃率。

目前虽然不能把系统所有的crash都处理掉,不过一些常见的高频次发生的crash,系统都会处理。目前主要可以处理掉的crash类型有一下几种:

1.unrecognized selector crash

2.KVO crash

3.NSNotification crash

4.NSTimer crash

5.Container crash(数组越界,插nil等)

6.NSString crash (字符串操作的crash

7.UI not on Main Thread Crash (非主线程刷UI(机制待改善))

下面会一一讲解如何解决这些carsh

unrecognized selector crash

unrecognized selector类型的crash是经常发生的carsh,我们要解决这个carsh就必须先了解它产生的具体原因和流程。

什么时候会报unrecognized selector的异常?

objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,如果,在最顶层的父类中依然找不到相应的方法时,程序在运行时会挂掉并抛出异常unrecognized selector sent to XXX

在找不到方法时,查找方法将会进入方法Forward流程,系统给了三次补救的机会,所以我们要解决这个问题,在这三次均可以解决这个问题

 

编辑

请点击输入图片描述

由上图可见,在一个函数找不到时,runtime提供了三种方式去补救:

1、调用resolveInstanceMethod给个机会让类添加这个实现这个函数

2、调用forwardingTargetForSelector让别的对象去执行这个函数

3、调用forwardInvocation(函数执行器)灵活的将目标函数以其他形式执行。

如果都不中,调用doesNotRecognizeSelector抛出异常。既然可以补救,我们可以用消息转发机制来做&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值