【发布时间】:2011-02-23 07:06:35
【问题描述】:
我在 Cocos2d 中有一个 iPhone 应用程序,由于内存问题,它有时会在实际设备上崩溃。
到目前为止,我发现这些场景在切换时并没有完全释放 - 他们的 [retainCount] 大约是 4-10 :)
dealloc 方法永远不会被调用,然后我假设,当我切换场景几次时,就会出现内存问题。
我想知道 - 我应该在哪里释放场景?由于它有很多孩子,我想我应该对它们进行清理。但事实证明,从层中删除所有子层并不会减少它的保留计数。我在我的cleanup 方法中添加了这样一段代码:
- (void) cleanup {
while ([self.children count] > 0) {
CCLOG(@"child: %d - %@ rc: %d", 0, [self.children objectAtIndex:0], [[self.children objectAtIndex:0] retainCount]);
[self removeChild:[self.children objectAtIndex:0] cleanup:YES];
}
[super cleanup];
}
但是[self retainCount] 方法仍然返回一个大于 1 或 0 的数字,并且我的 dealloc 没有被调用。
为了正确释放这些孩子,我应该做些什么吗?如果我将自己的 CCSprite 子类添加为子类,我是否应该在该类中做一些特定的事情 release 或 dealloc 方法,然后只是调用它的 [super] 方法?
【问题讨论】:
标签: iphone cocoa-touch memory-management cocos2d-iphone