知识点积累---容易造成循环引用的几种情况
2017-02-22 本文已影响4人
summer_code
循环引用是指 一个对象A持有了B 而B又持有了A 这样就容易早晨循环引用.双方都同时保持对方的一个引用,导致任何时候引用计数都不为0,始终无法释放 若当前对象是一个ViewController,则在dismiss或者pop之后其dealloc无法被调用,在频繁的push或者present之后内存暴增
一:声明代理delegate属性
解决方案就是一定要记住,在声明delegate的时候修饰为weak(ARC)或者assign(MRC)
ARC环境下代理属性为什么用weak,如果用strong的话会发生循环引用
self --> person --> delegate --> self
self.person = [[Person alloc] init];
self.person.delegate = self;
二:使用NStimer时:
当NStimer作为某个类的成员属性是会发生循环引用。设置为成员属性是有一个self对timer的强引用, 在实例timer的时候一般指定的target为:self。这样就造成了循环引用,
解决办法:
//停止定时器
[self.myTimer invalidate];
//销毁timer
self.myTimer = nil;
注: NStimer停止后是不能再开启的,所以使用的时候 停止timer后设为nil。再在使用的地方创建一个nstimer就好。
三:使用block时: