У меня проблема, которая действительно делает мою голову вXcode Instruments - не может найти утечку
Так в основном у меня есть MainMenuScene, который в свою очередь создает тестовый слой.. Этот слой очень прост, так как он создает только метку оценки и кнопку, которая добавляется в меню. При нажатии этой кнопки MainMenuScene заменяется пустой сценой, а затем снова загружается MainMenuScene.
Пока все хорошо. Однако проблема заключается в том, когда я беру кучу в инструментах каждый раз, когда сцена перезагружается, я получаю увеличение кучи около 20 КБ. Когда я копаю глубже в расширенном представлении, кажется, что спрайт и шрифт из тестового слоя не освобождаются, и все же вызывается метод dealloc со слоя.
Я также добавляю поддержку ARC для своих файлов, кроме основных файлов Cocos. Может ли это быть связано каким-либо образом?
Вот тестовый слой:
@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
Я действительно не могу видеть, что случилось с этим.
Благодаря
Что подсказывает ваша оптимизация? Вы получаете катастрофу памяти? Разница в куче 20K для меня не очень похожа. Это просто предварительная зрелая оптимизация? Я могу понять, что это беспокоит вас, что память растет. Это тоже меня беспокоит, но это проблема? –
@Matt Длительный размер всего 20 КБ, потому что это небольшой тестовый слой. Если я использую оригинальный слой, утечка около 400 кб :( –