IOS 项目中必须避免的几种循环引用的问题
来源:互联网 发布:淘宝头条申请 编辑:程序博客网 时间:2024/06/04 00:48
所谓循环引用就是两个对象互相拥有了对方的强引用,两个对象都没法被释放,从而造成了内存泄漏的问题。
下面我们就列举几种可能会造成循环引用的情况:
1.NSTimer的使用。
timer引用了self:在target上面进行了强引用
而self又引用了timer:timer是self的成员变量
所以timer和self之间就形成了一个循环引用。在官方文档中中有说到,只有当timer invalidate之后才会释放对target的强引用,所以我们在销毁self之前要将timer invalidate掉。
2.block的使用
在项目中我们经常使用block来进行回调,例如AFNetworking就用block来回调网络请求成功与否。在使用block的时候要避免直接使用self,因为直接使用self会造成循环引用。
因为block在定义之后会默认复制内部使用到的指针,并且是强引用。所以我们在使用block的时候最好在block之前对block内部使用到的指针进行弱引用复制。解决方案如上图,我们创建一个weakSelf来避免这种循环引用的情况。
3.delegate的使用
delegate的循环引用就是在使用的时候把其声明为了强引用,也就是使用了strong修饰符。代理方会拥有被代理方的引用,被代理方又通过delegate拥有了代理方的引用,这就造成了循环引用。谨记delegate要用weak来修饰!
新手IOS程序员,欢迎指正^ ^。
0 0
- IOS 项目中必须避免的几种循环引用的问题
- IOS 如何避免Block的循环引用
- ios 避免self循环引用的方法
- iOS中Block的循环引用问题
- iOS中block的循环引用问题
- 开发中必须避免的基础问题
- 开发中必须避免的基础问题
- 开发中必须避免的基础问题
- iOS内存管理(4)--Block属性用copy修饰 & 避免循环引用的问题
- iOS 容易引起“循环引用”的几种场景
- ios避免循环引用
- iOS中避免类的循环引用和协议一起使用
- iOS 中Block的正确使用避免循环引用和Crash
- 避免block的循环引用
- 避免Block的循环引用
- iOS 中关于block 的循环引用问题
- iOS中Block的引用循环问题 (ARC & non-ARC)
- iOS 解决block中self的循环引用问题
- PopupWindow的一些属性
- Llama-impala on yarn的中间协调服务
- Hadoop--Hadoop2.X编译安装和实验--练习2
- [Material Design]使用RoundedBitmapDrawable快速生成圆角和圆形图片
- dotfuscator使用方法
- IOS 项目中必须避免的几种循环引用的问题
- 优酷上传视频代码
- Spring-data-redis:特性与实例
- UITableView优化技巧
- bluetooth4.0 协议概略
- 对C语言中的字符串,字符数组以及用指针表示字符串的理解
- 文件描述符资料-------15--7-17:文件描述符和文文件对应
- 选择排序
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化