首页 > 移动平台 > 详细

iOS闭包循环引用情况

时间:2016-02-28 06:27:17      阅读:363      评论:0      收藏:0      [点我收藏+]

学习博客前需知道的概念有:闭包、Retain Cycle。

我的博客主要来源于:

https://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=404081690&idx=1&sn=43a783cb23bad5154e2e3f94303eea13&scene=0&uin=MTYzMDU2Njg2MQ%3D%3D&key=710a5d99946419d900eb41ea8134a224be2889a763e68a3756ee008ed775cc6887ec4eb2992e62d211f2ea1e536f8ae4&devicetype=iMac+MacBookAir6%2C2+OSX+OSX+10.10.5+build(14F27)&version=11020201&lang=zh_CN&pass_ticket=%2BtKiYsoFx546eqMxaj7GAlW2dpgBE%2Bl4OYqhW3uC%2BbWPuKvjKy8d8rG%2FmztgPdAx

 

一、为什么在闭包中很容易造成循环引用呢?

1、首先block属性修饰符必须是copy,这样类实例后对象持有block。

2、在block块中,使用类的属性时,其实就是持有self对象。

因此如何解决闭包中的循环引用问题?

将self对象赋值给用weak修饰的对象,然后在block块中使用新对象。

二、说到这个,就难免延伸到内存泄漏查找问题。

1、用静态工具Analyze,标记内存泄漏的地方。(XCode->Product->Analyze)

2、使用动态工具instrument的Leaks模板,包括Allocations模板在内。(XCode->Product->Profile)

3、工具检查不出时,通过人为分析检查。

另外,有个小技巧,可以在运行过后,查出没有被释放的对象。具体如:

在dealloc方法中加入代码:NSLog(@"内存泄漏判断:%@", [[self class] description]);

这样设置后,如果打印,则表示没有泄漏,如果没打印,则需要检查是否可以不释放该对象。

 

iOS闭包循环引用情况

原文:http://www.cnblogs.com/zhouyi-ios/p/5223977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!