美文网首页
产生循环引用的几种情况

产生循环引用的几种情况

作者: wenny_Liu | 来源:发表于2016-12-06 11:56 被阅读23次

1.使用delegate代理时,属性修饰符采用strong时,会产生循环引用,因此delegate的属性修饰符要使用weak
2.block
在ARC中,block的属性修饰符可以使用weak或者strong

__weak typeof(self) weakSelf = self;

self.block = ^{

    weakSelf ....
    
};

3.当block中有延时操作时,

__weak typeof(self) weakSelf = self;

self.block = ^{

    __strong typeof(self) strongSelf = weakSelf;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        strongSelf .....
    });

};

此时weakSelf有可能会在使用前被提前释放,因此需要在dispatch_afert前面增加强引用的相关代码
4.NSTimer
timer引用了self:target时添加了强引用
self又引用了timer:timer是self的成员变量
因此,需要在self被释放前将timer invalidate 并且置为nil
[timer invalidate];
timer = nil;

相关文章

  • 产生循环引用的几种情况

    1.使用delegate代理时,属性修饰符采用strong时,会产生循环引用,因此delegate的属性修饰符要使...

  • iOS循环引用的几种情况

    你踩过的坑里尽是前人的脚印。---------前言 在开发过程中我们会遇到一些循环引用的问题,像循环引用Block...

  • iOS循环引用深入理解

    循环引用也就是引用之后造成的一个循环用图理解吧 下面是可能造成循环引用的几种情况 1.协议代理 都知道协议的代理对...

  • 循环引用的相关问题

    1、循环引用的种类(1)自循环引用(2)相互循环引用(3)多循环引用 如何破除循环引用?(1)避免产生循环引用(2...

  • iOS 中的循环引用

    此处记录的都是ARC情况下~~~ 循环引用是什么? 当两个不同的对象各有一个强引用指向对方,那么循环引用便产生了,...

  • Block底层常见问题解析

    循环引用 下面代码会产生循环引用吗? 显然是会的。原因在于strongSelf和doWork2产生了循环引用。解决...

  • iOS 内存管理面试题(循环引用)

    循环引用 循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。 如何解决循环引用? 1、避免产生循环引用...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • OC block基本操作--解除引用循环

    block截获self情况. 略. block截获成员变量时,避免循环引用的几种基本操作. 下面这段代码如果不做任...

  • iOS底层 -- Blcok本质之循环引用

    一、产生循环引用的原因 由图可知,person对象强引用block,block强引用person对象,形成循环引用...

网友评论

      本文标题:产生循环引用的几种情况

      本文链接:https://www.haomeiwen.com/subject/hcqrmttx.html