今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉。

下面就讲一讲怎么去定位这个问题:

1.打开Xcode,把项目跑动起来,然后选择这个选项卡

2.现在就可以看到这个画面 

3. 现在我们可以看到这个页面,发现我的CPU达到了 105%,这肯定是有问题,那现在怎么办呢,我们可以看到右边的图,点击Profile in Instruments. ---》 然后点击Transfer.

4. 现在就进入到Instruments中,我们看看究竟发生了什么,到底是什么情况,导致出现了这种问题。

1. 首先,我通过观察CPU占用率,各个页面进行排查,看是进行了何种操作后,才出现的这种CPU占用率居高不小。

2. 我很庆幸,我很快就定位到了原因。所以我可以知道是进入某一个页面,触发了某种操作后,然后,就会出现这种情况

3. 现在就可以通过Instruments来进行定位,来看看是执行什么代码,导致了这种非常耗时的操作,让CPU一直如此忙碌。

4.选中Xcode先把程序(command + R)运行起来

5.再选中Xcode,按快捷键(command + control + i)运行起来,此时Leaks已经跑起来了

6.由于Leaks是动态监测,所以我们需要手动操作APP,一边操作,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测(也可继续检测,当多个时暂停,一次处理了多个).

扩展: 查内存泄露具体方法 点击打开链接l

5. 电脑卡爆了,哎。 回去了在截图,反正最后是跟踪到了 Runloop下。 有一个行为一直在占据着主线程,并且不释放,所以导致CPU一直在大量消耗,内存也慢慢渐长,一般能造成这种情况的就只有循环,并且一直没有释放,我利用Instruments中的leaks,然后进行了各种各样的内存泄露的检测及修复, 也正是这样,我发现了问题的所在。 原来是我写的有一个方法有问题。 我写的代码如下:

我们很清晰的看到如果条件为真,这就是一个死循环,我的PM那时候,这儿就想做一个图片一直闪烁的效果,这儿可以采用三种方案,一种是用这种循环引用来执行一套方法, 一种是通过NSTimer来定时去调用一个方法。我开始选择了前者,那时候也知道后果,也许这个死循环会一直存在下去,直到这个VC被dealloc,最后一种是通过 core animation来实现。 这种事最推荐的,具体写法,我会在后面开博客进行讲解

    -(void)animationAction:(bool)isNeedbreak{if(!isNeedbreak) {[self performSelector:@selector(animationAction:) withObject: [NSNumber numberWithBool:YES] afterDelay:2];}}

2. 由于有上面这个担心所以,我在popviewcontroller, 控制器出栈的时候,我调用了如下方法,那个时候太粗心了,大概比方,是我想延迟2s执行一个方法,这个过程中,我想终止方法,那就只有通过调用下面两种随意一种,我却很天真的以为,这样就可以完美的终止死循环的调用。

  //这个是取消所有的延迟执行函数。[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(animationAction:) object:[NSNumber numberWithBool:YES]];[NSObject cancelPreviousPerformRequestsWithTarget:self];

3. 发现问题依然存在,所以只能用我的第二种解决办法, 用NSTimer来代替他。代码如下

NSTimer *animationTwoTime = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(productBrandIconAnimationWithIsBreak:) userInfo:[NSNumber numberWithBool:NO] repeats:YES];

4. 然后在vc出栈的时候,然后把NSTimer进行 invalidate下。

总结:

1.以后一定要慎用用for循环来进行实现动画的连续执行. 
     2. 这种动画效果尽量用 core animation来进行解决。

iOS CPU占有率达到了100%甚至更多,然后导致App闪退情况总结及解决过程。相关推荐

  1. iOS CPU占有率达到了100%甚至更多,然后导致App闪退

    今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉. 下面就讲一讲怎么去定位这个问题: 1.打开Xcode,把项 ...

  2. iOS 手写键盘与触摸手势冲突,导致崩溃闪退

    问题描述: 在iPhone上调用键盘,用键盘输入时正常没有任何问题,但切换成手写输入法之后,写第二个字的时候会出现闪退崩溃的现象.其原因就在于手写键盘的事件与触摸手势的事件发生了冲突. 解决方案: 扩 ...

  3. ios点击推送闪退_苹果推送iOS 14.2 beta 1:千万别更新,大批应用闪退

    大家好,我是佚名.苹果昨天才推送iOS14 正式版系统.而在今天又推送了iOS 14.2 beta 1 开发者测试版系统.由于这个版本问题非常明显,所以我先说结论: 千万不要更新! 千万不要更新! 千 ...

  4. 避难所Android闪退,iOS/安卓版《辐射:避难所》Fallout Shelter攻略:闪退进不去解决办法...

    辐射避难所Fallout Shelter闪退进不去解决办法: 1.网络异常 由于<辐射:避难所>(Fallout Shelter)是一款需要联网的游戏,所以如果我们的网络出现异常很容易造成 ...

  5. AMD的CPU运行Matlab软件进行神经网络运算时总是出现闪退问题及解决方法

    问题描述: 用AMD的CPU运行matlab做神经网络训练时,总是闪退(其它计算都正常),提示错误如下: 所用CPU型号:AMD的3700X MATLAB 版本:  8.6.0.267246 (R20 ...

  6. iOS 微信分享,返回自己的app 闪退

    一个手机安装了多个(至少两个)微信配置的( URL Schemes)是一样的发生闪退 场景:手机里面安装了两个一个测试环境的,一个生产环境的,当分享成功返回自己的APP 的时候发生闪退 分析:因为手机 ...

  7. iOS app崩溃率,如何解决线上闪退

    //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 1.如何追踪app崩溃率,如何解决线上闪退 当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.cra ...

  8. android闪退比ios多,安卓和苹果多年使用后有什么区别?一个易卡顿,一个易闪退...

    如果对于近几年的手机市场进行分析得到话,能够看到现阶段国产手机品牌已经占据更多市场份额,这也意味着国外品牌在市场当中影响力正在逐步下滑,特别是三星.苹果这样的手机品牌,在近几年的市场当中,销量上明显出 ...

  9. iphone闪退修复工具_升级 iOS 14.2 微信闪退?iPhone 12 维修贵

    原标题:升级 iOS 14.2 微信闪退?iPhone 12 维修贵 昨天,苹果推出 iOS 14.2 正式版系统,我相信你们都知道了,主要新增几点功能,并没有针对性解决耗电问题,而对 AirPods ...

最新文章

  1. API 分页设计与实现探讨
  2. 零基础python入门书籍推荐书目_铁粉看过来!送书啦,Python推荐书单,送书10本!...
  3. java并发编程实践学习---java的类锁和对象锁
  4. Telerik RadGridView动态增删行及行列操作
  5. 鹅厂后台开发工程师的工作日常
  6. jsf标签_多个动态包含一个JSF标签
  7. 如何开启OpenSSL和mcrypt
  8. 5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?
  9. Bash字符串处理(与Java对照) - 18.格式化字符串
  10. 如何升级Linux内核(RHEL/Fedora/CentOS升级内核 Debian/Ubuntu升级内核)
  11. hj212协议如何和php通讯,5G/4G边缘计算网关如何实现HJ212协议上报
  12. 清北学堂模拟赛day7 错排问题
  13. 高光谱和图像特征相融合的生菜病害识别
  14. python自动化办公真的好用吗-用 Python 自动化办公能做到哪些有趣或有用的事情?...
  15. 使用JSON和Jersey的Java RESTful Web服务
  16. win10计算机本地组策略编辑器,Win10本地组策略编辑器怎么打开(方法汇总)
  17. raw文件格式 Android,手机摄影知识讲堂:关于RAW格式的那些事
  18. Axial Attention 和 Criss-Cross Attention及其代码实现
  19. c语言中while循环语句的作用,while和do while循环,C语言while和do while循环详解
  20. linux网卡team0,team

热门文章

  1. Hadoop之SSH无密登录配置
  2. Linux 中启动jar包命令
  3. android 单例销毁,【设计模式与Android】单例模式——独一无二的皇帝
  4. 09.vue-charp-09 Render函数
  5. 【洛谷P6072 [MdOI2020] Path】【回滚莫队+Trie】
  6. 苹果开发者账户申请流程-2016
  7. 尼尔 斗技场 机器人_尼尔机械纪元机器人竞速支线过关攻略
  8. 贝思外贸软件-支持多种方式登录
  9. Python关联规则挖掘情侣、基友、渣男和狗。学会这个就非常牛逼了。
  10. LDR6023C应用于充电加听歌领域,各大转接器品牌都应用于它(LDR6023C)