首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cocos2d iPhone应用程序中未完全发布的场景-调试

在Cocos2d iPhone应用程序中未完全发布的场景-调试
EN

Stack Overflow用户
提问于 2011-02-23 15:06:36
回答 2查看 765关注 0票数 1

我在Cocos2d中有一个iPhone应用程序,由于内存问题,它有时会在实际设备上崩溃。

到目前为止,我发现场景在切换时并没有完全释放-它们的[retainCount]大约是4-10 :)

dealloc方法永远不会被调用,然后我假设,当我切换几次场景时,内存问题就出现了。

我想知道-我应该在哪里重新拍摄场景?由于它有许多孩子,我想我应该做一个清理-删除他们。但事实证明,从层中删除所有子对象并不会减少该层的保留计数。我在我的cleanup方法中添加了这样一段代码:

代码语言:javascript
复制
- (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作为子类,我应该在该类的releasedealloc方法中做一些特定的事情,而不是直接调用它的[super]方法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-02-24 01:53:24

不要调用retainCount

正如您已经发现的,在处理复杂的框架时,retainCount是无用的。有许多内部实现细节可能会导致保留计数在任何给定时间为意外值,而不会指示错误。

您应该释放场景以平衡您保留场景的次数,不多也不少。

如果你释放它的次数比你保留它的次数多,你的应用程序很可能会在你可能不小心修复真正的问题时崩溃。

通常,在处理视图、层或精灵等项的层次结构时,您会删除根视图/层/精灵,该删除会负责拆卸层次结构(包括根据需要释放)。

这假设您在层次结构中没有保留任何内容。如果您有,那么您还需要在删除和释放根时释放这些引用。

票数 4
EN

Stack Overflow用户

发布于 2011-02-23 21:11:47

通常你不需要自己释放你的孩子。你怎么添加你的孩子?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5087939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档