2010-12-04 6 views
0

je c un développeur débutant (pour le développement iphone) et j'ai une question sur la gestion de la mémoire. mon code est juste en dessous;objectif c gestion de la mémoire

Model1* model = [[Model1 alloc] init]; 
model.username = [[NSString alloc] initWithString:@"ysnky"]; 
[model.username release]; // is it needed 

dois-je libérer model.username depuis que j'alloue? merci ...

Model1.h

@interface Model1 : NSObject { 
    NSString* username; 
} 
@property (nonatomic, retain) NSString* username; 
@end 

Model1.m

@implementation Model1 
@synthesize username; 

-(void) dealloc { 
    [username release]; 
    [super dealloc]; 
} 
@end 

Répondre

0

Avec le code que vous avez écrit, oui, vous devez libérer cette chaîne parce que comme vous l'avez remarqué, c'est une chaîne que vous avez créée, puis la propriété provoque un retain supplémentaire.

Mais vous pouvez aussi faire simplement:

model.username = @"ysnky"; 
-1

tout d'abord utiliser s'il vous plaît étiquette de code pour envelopper votre code.

faire quelque chose comme:

model.username = [[NSString alloc] initWithString:@"ysnky"]; 

est très découragé, vous pouvez utiliser isntead:

model.username = @ "ysnky"

dans ce cas, vous n'avez pas à vous soucier la libération de l'objet.

Mais si vous voulez utiliser

model.username = [[NSString alloc] initWithString:@"ysnky"]; 

la réponse à votre question est non. Vous n'avez pas besoin d'appeler

[model.username release] 

ou pour être plus precisous votre code est erroné, vous devez faire quelque chose comme:

Model1* model = [[Model1 alloc] init]; 
NSString *tmpString = [[NSString alloc] initWithString:@"ysnky"] 
model.username = tmpString; 
[tmpString release]; 

enfin, je vous suggère de concevoir le mieux à votre classe, vous peut faire mieux en faisant un initialiseur comme:

Model1* model = [[Model1 alloc] initWithUsername:@"skdnaodnsa"]; 
+0

Sans [version model.username], le code tel que écrit aurait une fuite. –

+0

Si vous lisez une ligne ci-dessous, je vous explique pourquoi n'est pas bon appel [model.username release] –

+0

Salut les gars, je suis toujours confus. Oui ou non? Je connais model.username = @ "ysnky" genre d'utilisation mais je veux juste connaître le concept si j'utilise alloc. puisque dans mon application ce n'est pas un objet chaîne, c'est un objet personnalisé. – ysnky