可以应用PLCrashReporter或者KSCrash库解析崩溃日记并符号化,再上传至后台,本身做收集加统计,顺带提一下,我们应用了PLCrashReporter,后端应用了Laravel,很便利的开辟了一套简单的崩溃及各类机能参数收集的体系,所以如不雅要自建,可以推敲这个组合
-
CocoaPods
-
CPU、内存、FPS记录及保存
-
卡顿日记收集
用户能感触感染到的卡顿一般都是因为在主线程做了耗时操作,举几个会产生卡顿的例子:
-
viewDidLoad中 for轮回中初始化10000个UILabel实例
-
cellForRow代劳办法中手动休眠usleep(100*1000)
若何监听这些事宜呢?查看下源代码,核心办法CFRunLoopRun简化后的逻辑如下:
- int32_t __CFRunLoopRun()
- {
- //通知即将进入runloop
- __CFRunLoopDoObservers(KCFRunLoopEntry);
- do
- {
- // 通知将要处理timer和source
- __CFRunLoopDoObservers(kCFRunLoopBeforeTimers);
- __CFRunLoopDoObservers(kCFRunLoopBeforeSources);
- __CFRunLoopDoBlocks(); //处理非延迟的主线程调用
- __CFRunLoopDoSource0(); //处理UIEvent事宜
- //GCD dispatch main queue
- CheckIfExistMessagesInMainDispatchQueue();
- // 即将进入休眠
- __CFRunLoopDoObservers(kCFRunLoopBeforeWaiting);
- // 等待内核mach_msg事宜
- mach_port_t wakeUpPort = SleepAndWaitForWakingUpPorts();
- // Zzz...
- // 大年夜等待中醒来
- __CFRunLoopDoObservers(kCFRunLoopAfterWaiting);
- // 处理因timer的唤醒
- if (wakeUpPort == timerPort)
- __CFRunLoopDoTimers();
- // 处理异步办法唤醒,如dispatch_async
- else if (wakeUpPort == mainDispatchQueuePort)
- __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__()
推荐阅读
“高德易行平台的上线,标记住高德地图在交通出行计谋进级上迈出了重要一步。其实交通在我看来竽暌剐三元素,就是人、车和路,它们构成了交通核心的关键词。将来高德将以易行平台与交>>>详细阅读
本文标题:iOS如何进行优化项目?
地址:http://www.17bianji.com/lsqh/36461.html
1/2 1