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;
Другие вопросы по тегам