0

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;

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

4

2 回答 2

3

dealoc发送后未调用该对象被其他人保留的唯一原因release(添加到 NSArray 或 NSDictionary,由您的对象之一保留,您已对其运行操作等)。如果你不知道,什么对象保留你的对象,覆盖它的retain方法为

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

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

于 2012-10-27T15:51:08.517 回答
0

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

//release

[tileMap removeFromParentAndCleanup:YES];
[tileMap release];
tileMap = nil;
于 2012-10-27T17:04:07.453 回答