即使在发布后也没有调用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?
答案 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;