ARC CCSprite 内存泄漏
Posted
技术标签:
【中文标题】ARC CCSprite 内存泄漏【英文标题】:ARC CCSprite memory leak 【发布时间】:2013-03-14 03:18:19 【问题描述】:我有以下代码
__weak CCSprite *paddleSprite = [CCSprite spriteWithFile:@"paddle.png"];
Instruments 正在检测内存泄漏,并告诉我这条线上有内存泄漏。
有没有人对此有所了解。 CCSprite 不是自动释放对象吗?
【问题讨论】:
【参考方案1】:我解决了这个问题。问题实际上出在 Box2d 中。对于 b2BodyDef 我有这个:
paddleBodyDef.userData = (__bridge_retained void*)paddleSprite;
但这是不正确的(在我的情况下)。正确的是这个
paddleBodyDef.userData = (__bridge void*)paddleSprite;
我也在dealloc方法中放了
paddleBodyDef.userData = NULL;
【讨论】:
paddleSprite
和userData
的类型是什么?上面的代码是ARC下的吗?我认为您可能在这里保留了userData
不足...(也许您的泄漏是由于保留周期)
这也很危险,因为您将精灵声明为弱。如果在任何时候 box2d 用户数据是精灵的唯一引用,精灵就会解除分配并且用户数据指针变成垃圾。您的桥保留转换是正确的,您只是忘记在将 userdata 设置为 null 之前将 bridge_transfer 转换为 -1 保留计数。以上是关于ARC CCSprite 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章