YYWeaKProxy的学习

作者: _阿南_ | 来源:发表于2017-09-27 15:05 被阅读99次
图片来之网络

查看了YYWeakProxy的代码,仅仅是重载了父类的方法,将输入的target保存为实例变量,然后返回self。在YYKit中的使用地方有:
YYAnimatedImageView中151行

_link = [CADisplayLink displayLinkWithTarget:[YYWeakProxy proxyWithTarget:self] selector:@selector(step:)];

YYWebImageOperation.m的306行

_connection = [[NSURLConnection alloc] initWithRequest:_request delegate:[YYWeakProxy proxyWithTarget:self]];

YYLabel.m的143行:

_longPressTimer = [NSTimer timerWithTimeInterval:kLongPressMinimumDuration
                                              target:[YYWeakProxy proxyWithTarget:self]
                                            selector:@selector(_trackDidLongPress)
                                            userInfo:nil
                                             repeats:NO];

等等。

主要是使用在传入self时,方法会对self进行强引用。使用YYWeakProxy是为了解决强引用的问题。
强引用引起的问题是,因为一般NSTimer的invalidate方法是放在dealloc方法中去执行,而RunLoop已经强引用了NSTimer,所以当界面已经被摧毁时,而因为self被NSTimer强引用,NSTimer被RunLoop引用,所以不会执行dealloc方法。因为不执行dealloc方法,导致invalidate不会被执行。此时self就会内存泄露了。
使用了YYWeakProxy后,当界面被摧毁时,因为NSTimer没有引用self,而是引用了YYWeakProxy。所以可以执行dealloc方法,此时在dealloc中执行了invalidate。这样就会解除NSTimer对YYWeakProxy的强引用。最终self,NSTimer和YYWeakProxy也都得到了释放,内存没有被泄露。
感谢@席萍萍_iOS深圳的指点。

// END

相关文章

  • YYWeaKProxy的学习

    查看了YYWeakProxy的代码,仅仅是重载了父类的方法,将输入的target保存为实例变量,然后返回self。...

  • iOS使用CADisplayLink、NSTimer有什么注意点

    CADisplayLink、NSTimer会造成循环引用,可以使用YYWeakProxy,或者为CADisplay...

  • NSProxy 实现“多继承”

    之前有在YYWeakProxy看到过 NSProxy 使用,可以解决NSTimer 对 target 是强引用的问...

  • 2019-08-22 swift 实现YYWeakProxy

    参考文献:NSProxy 一些 使用关于NSProxy的理解Swift中Timer的循环引用解决方案(类似NSPr...

  • YYKit源码探究(八十八) —— YYWeakProxy防止强

    版本记录 前言 iOS圈内有几个人大家基本都知道,比如说王巍、唐巧,还有YYKit框架的作者现任职于滴滴的郭曜源 ...

  • 学习的学习

    “三分钟的热情相信大家都有,但是能够重复思考一个概念,一个知识点,并把它吃透掌握才是大部分人稀缺的能力。”李笑来老...

  • 学习的学习

    不只是学习,听完是不够的。 还要把学到的东西变成方法论、清单式的条目出来去刻意练习。去用,去不断的实践。 有个词 ...

  • 学习的真相|学习「学习」再学习

    不知不觉间,笑来老师在“好的家庭教育”讲的新课《学习的真相》,已经更新到了第12课,关于“学习的真相”这门课,我认...

  • 元学习——关于学习的学习

    元学习是一门关于如何学习的课程。 首先理清几个概念 1、学习是拼图 学习并不是线性的,相反学习是一张信息拼图,类似...

  • 学习,就是学习学习的态度!

    学习,从来都需要态度! 没有了态度,你来了,也不过是躯体入场,思想游荡! 那就学习学习的态度喽!

网友评论

    本文标题:YYWeaKProxy的学习

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