私は本当に頭を悩ませている問題を抱えています。
つまり、基本的に MainMenuScene があり、これがテスト レイヤーを作成します。このレイヤーは非常に単純で、スコア ラベルとメニューに追加されるボタンを作成するだけです。このボタンを押すと、MainMenuScene が空白のシーンに置き換えられ、MainMenuScene が再び読み込まれます。
ここまでは順調ですね。ただし、問題は、シーンがリロードされるたびにインストゥルメントでヒープショットを取得すると、ヒープが約 20kb 増加することです。拡張ビューを深く掘り下げると、testLayer のスプライトとフォントが解放されていないように見えますが、レイヤーの dealloc メソッドが呼び出されています。
また、コアの Cocos ファイル以外のファイルに ARC サポートを追加します。これは何らかの形で関連している可能性がありますか?
テストレイヤーは次のとおりです。
@implementation TestLayer
-(id)init
{
self = [super initWithColor:ccc4(2,2,2,210)];
if (self != nil)
{
// ask director the the window size
CGSize s = [[CCDirector sharedDirector] winSize];
self.isTouchEnabled = YES;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber * n = [NSNumber numberWithInt:[SDCloudUserDefaults integerForKey:@"highscore"]];
NSString *string = [formatter stringFromNumber:n];
//score
CCLabelBMFont * scoreLabel = [CCLabelBMFont labelWithString:string fntFile:@"scoreFont.fnt" width:s.width alignment:kCCTextAlignmentCenter];
scoreLabel.position = ccp( POS_X(443), POS_Y(877) );
[self addChild:scoreLabel z:90];
//PLAY BUTTON
CCMenuItemSprite *playButton = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithFile:@"play_up.png"]
selectedSprite:[CCSprite spriteWithFile:@"play_down.png"]
target:self
selector:@selector(Transition:)];
playButton.position = ccp( POS_X(380) , POS_Y(177));
menu = [CCMenu menuWithItems: playButton, nil];
menu.position = ccp(0, 0);
[self addChild: menu];
}
return self;
}
-(void) Transition:(ccTime) dt
{
[self unschedule:@selector(Transition:)];
[[SceneManager sharedSceneManager]RunSceneWithID:SCENE_LOADING:eCCTransitionCrossFade:1.0f];
}
- (void) dealloc
{
NSLog(@"%s",__FUNCTION__);
}
@end
これの何が悪いのか本当にわかりません。
ありがとう