Je travaille sur ma première application et j'ai quelques questions sur la gestion de la mémoire.Quelques questions sur la gestion de la mémoire iphone et cocos2d
Première question:
Je travaille sur une scène d'intro qui ressemble à ceci
#import "Intro_Scene.h"
#import "Main_Menu.h"
#import "Label.h"
@implementation Intro_Scene
@synthesize logo,label;
-(id) init
{
self = [super init];
if(self != nil)
{
//Load logo image and set position
logo = [Sprite spriteWithFile:@"AVlogo_1.png"];
logo.position = ccp(-50, 0);
logo.scale = 1.8f;
[self addChild: logo];
//Creates 3 actions for the logo sprite
id action0 = [MoveTo actionWithDuration:0 position:ccp(160,270)];
id action1 = [FadeIn actionWithDuration:3];
id action2 = [FadeOut actionWithDuration:3];
//Logo runs the actions
[logo runAction: [Sequence actions:action0,action1, action2, nil]];
//Schedules the changeScene method to switch scenes to main menu within 6 seconds of loading.
[self schedule: @selector(changeScene) interval:6.0f];
//Creates a label and positions it, Alternative Visuals
label = [Label labelWithString:@"Alternative Visuals" fontName:@"Verdana" fontSize:22];
label.position = ccp(160, 120);
[self addChild:label];
}
return self;
}
//Method called after intro has run its actions, after 6 seconds it switches scenes.
-(void)changeScene
{
[self removeChild:logo cleanup:YES];
[self removeChild:label cleanup:YES];
Main_Menu *mainMenu = [Main_Menu node];
[[Director sharedDirector] replaceScene: mainMenu];
}
-(void)dealloc
{
[[TextureMgr sharedTextureMgr] removeUnusedTextures];
[label release];
[logo release];
[super dealloc];
}
@end
Ai-je sorti tout correctement, et les fuites évitées? Je l'ai couru dans des instruments plusieurs fois et il n'a trouvé aucune fuite et utilisé environ 2 Mo de mémoire, est-ce beaucoup ou le montant à attendre? Est-ce que la méthode dealloc est également appelée quand la scène est remplacée?
Question 2:
Mon menu principal est configuré comme celui-ci
#import "Main_Menu.h"
#import "Sprite.h"
#import "cocos2d.h"
@implementation Main_Menu
@synthesize background, controlLayer;
-(id) init
{
self = [super init];
if(self != nil)
{
//Create the default background for main menu not including directional pad and highlight box
background = [Sprite spriteWithFile:@"Main_Menu_bg.png"];
background.position = ccp(160,240);
[self addChild:background];
//Adds the control later class to the main menu, control layer class displays and controls the directional pad and selector.
ControlLayer *layer = [[ControlLayer alloc] init];
self.controlLayer = layer;
[layer release];
[self addChild: controlLayer];
}
return self;
}
-(void) dealloc
{
[seld removeChild:background cleanup:YES];
[[TextureMgr sharedTextureMgr] removeUnusedTextures];
[background release];
[controlLayer release];
[super dealloc];
}
@end
Encore une fois que je fais tout correctement? Le calque ControlLayer que j'ajoute à cette scène contient un sprite de pavé directionnel que l'utilisateur utilise pour naviguer dans le menu. Dans les instruments Il confirme également qu'il n'y a pas de fuites de mémoire, et il utilise 4,79 Mo de mémoire. Encore une fois, est-ce un montant raisonnable? Je vais très probablement utiliser AtlasSprite et AtlastSpriteManager pour économiser de la mémoire. Je suis nouveau à cocos2d, donc si vous voyez que je fais quelque chose de mal, signalez-le! Je préférerais corriger les mauvaises habitudes dans les premiers stades. Et si vous avez d'autres conseils pour la gestion de la mémoire, partagez.