知识点积累---容易造成循环引用的几种情况

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时:

上一篇下一篇

猜你喜欢

热点阅读