关于ios循环引用
来源:互联网 发布:带mp3 解码 单片机 编辑:程序博客网 时间:2024/06/13 12:30
何为循环引用:
循环引用可以简单理解为A引用了B,而B又引用了A,双方都同时保持对方的一个引用,导致任何时候引用计数都不为0,始终无法释放。
后果:
内存不能及时释放,导致内存泄漏,引发程序崩溃。
几种循环引用情景:
1、delegate的写法,应按照如下写法,切记不可存在strong标示符。
声明delegate时请用assign(MRC)或者weak(ARC)
@property (nonatomic, weak, nullable) id <UICollectionViewDelegate> delegate;@property (nonatomic, weak, nullable) id <UICollectionViewDataSource> dataSource;
2、单例里面的变量
错误写法,然后将self传入,导致释放不掉。
@property (nonatomic,strong) UIViewController *mViewController;
3、block里面注意弱引用self即可
ARC环境下:1 self.arr = @[@111, @222, @333];2 __weak typeof(self) weakSelf=self;3 self.block = ^(NSString *name){4 NSLog(@"arr:%@", weakSelf.arr);5 };MRC环境下:解决方式与上述基本一致,只不过将__weak关键字换成__block即可
4、传值时注意被赋值的变量
UIViewController *vc;//默认为strong类型,同样可写为UIViewController __strong *vcUIViewController __weak *vc;//通过__weak弱引用变量。
5、NSTimer会对传入的target强引用
解决办法有两个:a.GCD完成NSTimer的功能https://github.com/mindsnacks/MSWeakTimerb.用一个中间对象处理YYWeakProxyc.NStimer停止后是不能再开启的,所以使用的时候 停止timer后设为nil。再在使用的地方创建一个nstimer就好.self.myTimer = nil;
阅读全文
0 0
- 关于ios循环引用
- iOS - 关于NSTimer的循环引用
- 关于IOS,多线程Block中的self循环引用问题!
- iOS 中关于block 的循环引用问题
- Ios 关于Block循环引用的面试题
- iOS 关于Block的使用及循环引用
- 关于IOS开发常见的循环引用问题
- ios避免循环引用
- iOS循环引用
- ios delegate循环引用
- iOS之循环引用
- iOS 循环引用问题
- ios中的循环引用
- iOS内存循环引用
- iOS解决循环引用
- iOS 循环引用
- iOS 循环引用问题
- iOS循环引用问题
- SLG手游Java服务器的设计与开发——架构分析
- windows下串口初步编程(多线程+windows串口)
- MySQL 5.6.21版本安装实例
- 关于错误:ORA-12592: TNS: 包错误 和 Io 异常: Connection reset by peer: socket write error
- 一篇文章让你看清楚运维的发展方向
- 关于ios循环引用
- Spring Data Redis(Repositories-Object to Hash Mapping)
- java8获取当前时间并格式化
- Hadoop中hdfs的读写过程
- Android开发的4个月里
- 什么是http接口?
- Linux之sed
- 用Java做国际化时,假如properties文件的属性值需要换行,如何处理?
- c源文件到执行文件的编译过程