我们可以看到在kCFRunLoopBeforeSources和kCFRunLoopBeforeWaiting等待时光过长即可剖断为卡顿,具体怎么算作卡顿,我们都知道FPS为一秒60帧阁下最好,FPS即为Frames Per Second,严格意义上一秒60帧算流畅,也就是一帧须要1s/60 = 16.6ms,推敲会有其他的一些事宜影响,可以用持续几回50ms或者单次耗时过长剖断为卡顿。剖断为卡顿之后,我们可以应用PLCrashReporter或者KSCrash生成日记记录,可以存储到本地
我们可以应用CFRunLoopObserverRef来及时获取NSRunLoop状况值的变更,一下为一个样例:
安闲崩溃,上传崩溃日记
经由过程应用NSSetUncaughtExceptionHandler注册本身的异常处理回调,产生崩溃时让法度榜样显示的安闲一点,不会直接闪退,可以弹出本身的崩溃异常界面,可以参考Bilibili的界面,比如说前方碰到高能反竽暌功之类,法度榜样须要重启之类的,不会让用户感到到很突兀得闪退了,也可以在收到崩溃日记背工动保护Runloop,下面是一个样例:
- // 1. 注册ExceptionHandler
- + (void)installUncaughtExceptionHandler {
- NSSetUncaughtExceptionHandler(&HandleException);
- signal(SIGHUP, SignalHandler);
- signal(SIGINT, SignalHandler);
- signal(SIGQUIT, SignalHandler);
- signal(SIGABRT, SignalHandler);
- signal(SIGILL, SignalHandler);
- signal(SIGSEGV, SignalHandler);
- signal(SIGFPE, SignalHandler);
- signal(SIGBUS, SignalHandler);
- signal(SIGPIPE, SignalHandler);
- }
- // 2. 处理崩溃信息
- void SignalHandler(int signal) {
- // 1. 获取调用栈
- // 2. 处理异常
- // 3. App保活
- BOOL isContiune = TRUE; // 是否要保活
- CFRunLoopRef runLoop = CFRunLoopGetCurrent();
- CFArrayRef allModes = CFRunLoopCopyAllModes(runLoop);
- while (isContiune) {
- for (NSString *mode in (__bridge NSArray *)allModes) {
推荐阅读
“高德易行平台的上线,标记住高德地图在交通出行计谋进级上迈出了重要一步。其实交通在我看来竽暌剐三元素,就是人、车和路,它们构成了交通核心的关键词。将来高德将以易行平台与交>>>详细阅读
本文标题:iOS如何进行优化项目?
地址:http://www.17bianji.com/lsqh/36461.html
1/2 1