关闭

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

1105人阅读 评论(0) 收藏 举报
分类:

    本文翻译自 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的时候,心里想着这个小技巧。




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1595442次
    • 积分:16687
    • 等级:
    • 排名:第597名
    • 原创:256篇
    • 转载:138篇
    • 译文:3篇
    • 评论:160条
    最新评论