本文主要是介绍不做从strong 到weak 的转换,如何避免循环引用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文翻译自 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的时候,心里想着这个小技巧。
这篇关于不做从strong 到weak 的转换,如何避免循环引用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!