不做从strong 到weak 的转换,如何避免循环引用

翻译 2015年07月09日 22:48:50

    本文翻译自 http://iosdevtips.co 网站

                                                      

    我们肯定被循环引用咬过至少一口。 特别是在现代iOS开发中,block 跟闭包 增长的越来越快。 你可能已经知道了,从一个block中引用任何的外部对象,会导致引用,如果这个外部对象正好拷贝或者引用了这个block ,那么就会导致循环引用。那么就会导致内存泄漏,除非人工的把 block 置空。


    有一种广为人知的方法,去避免这个问题。那就是用 weak引用, 但是我在看 Fackbook 的pop 开源项目的时候,我遇到啦一个有趣的解决方案。


这是来自 PopCustomAnimation.h 

/**

@param target The object being animated.

Reference the passed in target to help avoid retain loops.

*/

typedef BOOL (^POPCustomAnimationBlock)(id target, POPCustomAnimation *animation);


这个block里面的参数,从某种意义上来说,是冗余的。因为你从block中总是能够 显式的引用到任何的外部对象。但是它是非常有用的,因为现在你能够使用参数,而不是做一个weak 的引用。


这种方法能够避免你所必须做的 从 strong -> weak 的 跳舞。

所以你下次设计一个拥有block或者闭包的API的时候,心里想着这个小技巧。




iOS开发笔记之五十七——__weak与__strong是如何解决循环引用的

当我们写一个block时,如果你的block涉及被self持有以及需要访问self的成员时,循环引用问题由此产生。解决的办法也很简单,其中利用__weak与__strong是常见的手段,类似代码如下:...
  • lizitao
  • lizitao
  • 2017年02月03日 13:55
  • 1530

delegate 为什么应该是 weak 类型而不是strong类型

delegate 为什么应该是 weak 类型而不是strong类型 循环引用 对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b. 这时候b和c的引用计数分别...
  • fxmmc
  • fxmmc
  • 2014年10月16日 18:59
  • 1562

Swift 引用计数总结 Strong,Weak, unowned 简单使用

每天一小结,必须读几篇博客在闲暇时,下面开始进入正题: ARC ARC 苹果版本的自动内存管理的编译时间特性。它代表了自动引用计数(Automatic Reference Counting...
  • LiChang719
  • LiChang719
  • 2016年02月02日 16:17
  • 4496

简单快速的理解block的循环引用及__weak的使用条件

block循环引用会导致开辟的内存空间因为相互的引用而无法释放,是占用多余的内存空间的行为。在开发中,我们或多或少的都会遇到block块,但是新手因为接触的少,无法有条理的进行分析来确认是否存在循环引...
  • wuzesong
  • wuzesong
  • 2016年12月13日 11:07
  • 673

UI控件用weak还是用strong修饰

#import "ViewController.h" @interface ViewController () @property (nonatomic, weak) UIView *weakVie...
  • u011010305
  • u011010305
  • 2016年09月13日 09:28
  • 1364

iOS中代码创建UIView的时候,使用weak还是strong?

我们知道,从 Storyboard 往编译器拖出来的 UI 控件的属性是 weak 的,那么代码创建uiview的时候呢? 我认为 UI 控件用默认用 weak,根源还是苹果希望只有这些 UI 控...
  • Cjlcooper
  • Cjlcooper
  • 2016年12月08日 22:59
  • 710

《Objective-C高级编程:引用计数和strong ,weak

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/17694129 转载请注明出处 如果觉得文章对你有所帮...
  • u012588310
  • u012588310
  • 2014年09月11日 17:57
  • 1322

ARC 下属性 strong,weak,还有copy 等属性详解

http://www.jianshu.com/p/4a1d1921284b 虽然的确是最基本&被无数人写过的问题,但是今天还是想弄得更清楚一些,所以看了看官方文档,写了这篇博客。 assign...
  • jeffasd
  • jeffasd
  • 2016年06月18日 16:54
  • 1032

iOS Block 需不需要在Block内使用 __weak 来防止循环引用

在OC开发中使用 Block时防止循环引用,大家都知道要加 __weak 来防止循环引用,如下面的宏就是为了解决循环引用而添加的 /**  * 快速生成weak/strong类型的对象  */ #de...
  • jeffasd
  • jeffasd
  • 2016年06月18日 16:51
  • 2826

探讨声明UI控件属性 什么时候用weak什么时候用strong

也许我们在学习的时候,有人会告诉我们,UI控件的属性用weak修饰,而且,从Storyboard中拖出来的控件也都是用weak来修饰的,所以在习惯上,我们总会用weak去修饰。然而,在某些情况下,这么...
  • qinqi376990311
  • qinqi376990311
  • 2016年10月26日 14:33
  • 1557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不做从strong 到weak 的转换,如何避免循环引用
举报原因:
原因补充:

(最多只允许输入30个字)