iOS内存循环引用

来源:互联网 发布:js函数not defined 编辑:程序博客网 时间:2024/06/02 00:12

有朋友问循环引用的问题让我解释下,,我在这里解释下

内存循环引用,可以理解为a引用b  b又引用了a 双方都保持相对引用,引用计数永远都不为0,始终无法释放,拼房push 之后内存暴增,app容易内存警告

容易造成内存循环引用的情况


1,计时器NSTimer

计时器需要在不用的时候手动写方法释放掉

2,block

blockcopy时都会对block内部用到的对象进行强引用(ARC)或者retainCount1(ARC)。在ARC与非ARC环境下对block使用不当都会引起循环引用问题,一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身,简单说就是self.someBlock = ^(Type var){[self dosomething];或者self.otherVar = XXX;或者_otherVar = ...};block的这种循环引用会被编译器捕捉到并及时提醒。

ARC环境下可以通过使用_weak声明一个代替self的新变量代替原先的self,我们可以命名为weakSelf。通过这种方式告诉block,不要在block内部对self进行强制strong引用

3,delegate

代理的初始化用weak,,,







0 0
原创粉丝点击