Cocos2d: dealloc не вызывается после вызова release
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 не вызывается для вышеуказанного кода?
2 ответа
Единственная причина, по которой dealoc
не вызывается после отправки release
что объект сохраняется кем-то другим (добавлен в NSArray или NSDictionary, сохранен одним из ваших объектов, вы выполнили действие над ним и т. д.). Если вы не знаете, какой объект сохраняет ваш объект, переопределите его retain
метод как
- (id) retain
{
return [super retain];
}
Затем разместите точку останова внутри этого метода. Тогда вы сможете видеть стек вызовов каждый раз, когда что-то захочет сохранить ваш объект. Вы также можете переопределить release
метод
Наконец-то решили эту проблему. Отдельное спасибо Мориону. Здесь я явно использовал removeFromParentAndCleanup и затем вызывается dealloc.
//release
[tileMap removeFromParentAndCleanup:YES];
[tileMap release];
tileMap = nil;