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

オブジェクトが他の誰かによって保持されている(NSArrayまたはNSDictionaryに追加されている、オブジェクトの1つによって保持されている、オブジェクトに対してアクションを実行したなど)dealoc送信後に呼び出されない唯一の理由。releaseわからない場合は、どのオブジェクトがオブジェクトを保持しているかわからない場合は、そのretainメソッドを次のようにオーバーライドします。

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

次に、このメソッド内にブレークポイントを配置します。そうすれば、何かがオブジェクトを保持したいときはいつでも、コールスタックを見ることができます。releaseメソッドをオーバーライドすることもできます

于 2012-10-27T15:51:08.517 に答える
0

最後にこの問題を解決しました。モリオンに感謝します。ここでは、removeFromParentAndCleanup を明示的に使用してから、dealloc を呼び出しています。

//release

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