Cocos2d:调用release后不调用dealloc

时间:2012-10-27 15:13:27

标签: cocos2d-iphone

即使在发布后也没有调用Dealloc。这是我的初始化代码。

@interface PPTileMap : CCTMXTiledMap 
{

}
@end

@implementation PPTileMap

-(void)dealloc
{
    printf("Dealloc called\n");
}
@end

//allocation
PPTileMap *tileMap = [[PPTileMap alloc] initWithTMXFile:tilemapFile];

//release
[tileMap release];
tileMap = nil;

当我使用tilesMapWithTMXFile时它会...但在加载线程后崩溃。 为什么没有为上面的代码调用dealloc?

2 个答案:

答案 0 :(得分:3)

在发送dealoc后,release未调用对象被其他人保留的唯一原因(添加到NSArray或NSDictionary,由您的某个对象保留,您已对其执行操作)等)。如果您不知道,哪个对象保留您的对象,请将其覆盖为retain方法

- (id) retain
{
    return [super retain];
}

然后在此方法中放置断点。然后,每次想要保留对象时,您都可以看到调用堆栈。您还可以覆盖release方法

答案 1 :(得分:0)

终于解决了这个问题。特别感谢Morion。 在这里,我明确地使用了removeFromParentAndCleanup,然后调用了dealloc。

//release

[tileMap removeFromParentAndCleanup:YES];
[tileMap release];
tileMap = nil;