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




阅读更多
个人分类: iphone/object-c
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭