不做从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的时候,心里想着这个小技巧。




相关文章推荐

使用weak strong dance 解决 block 循环引用

使用 block 的时候很容易造成循环引用,使用 ARC 编译与否解决的办法也不一样,这里简单总结下,需要硬性的记住类型也是很烦的一件事,如果能自动推断出类型就好了,这里介绍一个保留的函数实现自动推断...
  • x1q2l3
  • x1q2l3
  • 2014年05月26日 11:25
  • 1291

block使用小结、在arc中使用block、如何防止循环引用、weak–strong dance

Block简介 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事。需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内...

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

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

Java strong、soft、weak以及phantom引用

在JAVA中,JVM负责内存的分配与回收。这套机制使用方便却不够灵活,稍微不注意就容易造成OutOfMemoryError错误。 解决内存泄漏问题除了写代码谨慎之外,还可以配合不同的引用方式进行...
  • cjwyc
  • cjwyc
  • 2016年11月23日 15:32
  • 252

iOS 强引用(__strong)和弱引用(__weak)浅析

iOS新手上路,求共勉,简单介绍强引用和弱引用

关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系

强引用和弱引用: 我们已经知道OC中的内存管理是通过“引用计数器”来实现的。一个对象的生命周期取决于它是否还被其他对象引用(是否retainCount=0)。但在有些情况下,我们并不希望对象的销...

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

ARCARC 苹果版本的自动内存管理的编译时间特性。它代表了自动引用计数(Automatic Reference Counting)。也就是对于一个对象来说,只有在引用计数为0的情况下内存才会被释放。...
  • openUrl
  • openUrl
  • 2017年03月27日 17:34
  • 823

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

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/17694129 转载请注明出处 如果觉得文章对你有所帮...

关于强弱引用的问题 strong,weak,assign

脑子越来越不好了,快忘了,简单整理一下记下喽 我先用a、b、c三个人来解释吧,a是持有者(小偷),b是被持有者(受害者),c是监控(警察),这里的警察比较变态一直监督的是b受害者。。。。。。。 a这个...

Java中的四种引用类型 Strong, Soft, Weak And Phantom

前言总所周知, java不同于c/c++,它不需要程序员自已来管理内存(分配,释放内存),java 会自己来管理内存,比如销毁某些不再被使用的对象。这些操作都是在一个后台线程默默进行(Garbage ...
  • rodbate
  • rodbate
  • 2017年06月04日 14:18
  • 294
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不做从strong 到weak 的转换,如何避免循环引用
举报原因:
原因补充:

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