【问题标题】:ARC CCSprite memory leakARC CCSprite 内存泄漏
【发布时间】:2013-03-14 03:18:19
【问题描述】:

我有以下代码

__weak CCSprite *paddleSprite = [CCSprite spriteWithFile:@"paddle.png"];

Instruments 正在检测内存泄漏,并告诉我这条线上有内存泄漏。

有没有人对此有所了解。 CCSprite 不是自动释放对象吗?

【问题讨论】:

    标签: objective-c cocos2d-iphone automatic-ref-counting ccsprite


    【解决方案1】:

    我解决了这个问题。问题实际上出在 Box2d 中。对于 b2BodyDef 我有这个:

    paddleBodyDef.userData = (__bridge_retained void*)paddleSprite;
    

    但这是不正确的(在我的情况下)。正确的是这个

    paddleBodyDef.userData = (__bridge void*)paddleSprite;
    

    我也在dealloc方法中放了

    paddleBodyDef.userData = NULL;
    

    【讨论】:

    • paddleSpriteuserData的类型是什么?上面的代码是ARC下的吗?我认为您可能在这里保留了userData 不足...(也许您的泄漏是由于保留周期)
    • 这也很危险,因为您将精灵声明为弱。如果在任何时候 box2d 用户数据是精灵的唯一引用,精灵就会解除分配并且用户数据指针变成垃圾。您的桥保留转换是正确的,您只是忘记在将 userdata 设置为 null 之前将 bridge_transfer 转换为 -1 保留计数。
    猜你喜欢
    • 2012-04-03
    • 2012-09-14
    • 2012-10-05
    • 2017-10-03
    • 2013-08-19
    • 1970-01-01
    • 2011-10-23
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多