美文网首页APP性能优化instrumentsiOS进阶知识
利用Instruments中的Leaks处理内存泄露

利用Instruments中的Leaks处理内存泄露

作者: 南城_ | 来源:发表于2016-04-05 17:46 被阅读4027次

这两天医生端第一版开发完了,正在进行测试。由于上个健康管理卫士是写的第一个项目,项目中的代码非常的乱。所以在医生端,自己尝试着对必要的模块进行了封装,例如网络请求、提示框等在原有三方库的基础上进行了二次封装, 并且把网络层完全的抽离了出来,方便统一管理。

但是最近测试的时候发现有很严重的内存泄露和循环引用情况发生。(/(ㄒoㄒ)/~~block用的有点乱了。)

简直是一步三泄...

分析了下,
1、首先是,在block中使用非私有成员变量的时候忘记加上

 __weak typeof(self)weakself = self;  //这一块在block中使用成员变量的时候需要加一下,关于这部分详细的解释可以看一下https://www.cnblogs.com/biosli/p/block_usage.html

导致了对象不能及时释放,造成了循环引用。(原谅我犯得小白错误/(ㄒoㄒ)/~~,后续要抓紧学习学习相关知识🐒🐒🐒)。

2、还有就是项目中使用了AFNetworking3.0,我在这个基础上又进行了封装,封装的时候使用的方法,存在问题。(好吧,第一次尝试果然有好多坑..后续慢慢填=。 = )。
大概是这样的,


  分析出来的泄漏点基本都跟网络部分有关,好吧看来真的是封装问题了。😢😢😢
  看了一下AFNetworking的官方demo,在网上找了点资料发现封装的时候基本使用的都是单例模式来创建AFHTTPSessionManager。而我封装的每次使用的时候都会创建一个AFHTTPSessionManager,像这样:

好吧应该是这里的问题,接着就把请求改成了单例模式。果然改成单例模式以后内存泄露点瞬间就只剩一个了,瞬间感觉世界清晰了好多。


改过之后:

(可是还有一个怎么办,看到叉号和减号感觉好纠结..强迫症么这是.😭😭😭😭。好吧只有继续查哪一块出错了..)

一查call Tree 是这个样子,当时就懵逼了...这是啥..main出错这怎么玩...



好吧,点进去一看猜是AppDelegate里面哪个地方出错了.只好一步一步排查了..(😭😭😭)



好吧,,最后定位在链接融云这一块,

融云的解释是这样的:

好吧,经过测试链接融云这一步。连接上的情况下会一直出现上面那个内存泄露点,失败或者将这部分屏蔽的时候不存在内存泄露情况。(哪位遇到过这个情况,求指教.😢😢😢)(PS. 这个问题解决了,更新成融云最新版本以后,这个内存泄露点已经解决。现在终于全绿了😂😂😂)


努力进阶中/(ㄒoㄒ)/~~..

相关文章

网友评论

  • 七里小晴天:从哪里看的block一定要 __weak typeof(self)weakself = self? 这很容易误导别人!
    南城_:谢谢提醒哈。 我修改了下,您要是有哪方面不清楚可以看一下后面新加的链接。
  • 0a7ea1459b80:楼主有空吗,有点问题想请教一下
    南城_:@哈嘿吼 :flushed: 刚刚看到。请问什么问题?
  • Hello_Tiger:博主,你是怎么动态监测内存泄漏变化的啊,我现在操作app的时候,instrument都是黑的,只能操作完后再去分析,不能动态实时分析
    南城_:@李小虎 :smile: 在Xcode里面先选择模拟器,然后点command+i 稍等会instrument 出来以后选择leaks,然后左上角的红色按钮就可以点了.点了就开了
  • 933e4e5b24bf:请问一下,我的block里面明显强引用了一个视图控制器,调试的时候也没有调用dealloc,但是leaks这么就是测不出内存泄露呢?
    南城_:@933e4e5b24bf :grin::grin::grin:不客气
    933e4e5b24bf:@南城_ 谢谢
    南城_:@933e4e5b24bf :flushed: 可能是这里引用没有造成循环引用的缘故吧.
  • yehot:博主,请问instruments leak 里的 减号 表示什么意思?
    南城_:@yehot 我理解的意思是泄露状况持平,没有发生新的泄漏点。 :stuck_out_tongue_winking_eye:
  • LeeCen:我使用了AFNetworking3.0 也出现和你一样的内存泄漏问题,我加了 __weak typeof(self)weakself = self; 也不行
    南城_:@Lee_Cen :stuck_out_tongue: 是不是SessionManager对象创建多了?..
    LeeCen:@南城_ 我并没封装, 我还不太会封装
    南城_:@Lee_Cen :flushed: 额.话说你又二次封装了么。

本文标题:利用Instruments中的Leaks处理内存泄露

本文链接:https://www.haomeiwen.com/subject/lsrplttx.html