2010-06-17 9 views
1

Quelle est la méthode préférée et/ou correcte pour libérer une instance de NSMutableString (ou de toute autre classe) et affecter une nouvelle instance à la même variable dans Objective-C sur l'iPhone?Libération et affectation de la variable

Actuellement, je suis en utilisant

[current release]; 
current = [NSMutableString new]; 

mais je comprends que les œuvres suivantes, aussi. La variable current est déclarée dans la définition d'interface de ma classe et est libérée dans dealloc.

Répondre

0

Les deux versions devraient fonctionner aussi bien. Ce qui signifie que j'irais avec le premier - moins de lignes de code.

0

Si vous pensez à la gestion des variables d'exemple, je suggère d'utiliser property pour que - vous interface de classe déclare:

// MyClass.h 
@interface MyClass { 
    NSMutableString* current; 
} 

@property (nonatomic, retain) NSMutableString* current; 
@end 

Et puis laissez compilateur générer setter et getter pour vous automatiquement avec la mémoire souhaitée comportement de gestion:

// MyClass.m 
@implementation MyClass 

@synthesize current; // Tell compiler to generate accessor methods 
... 

la méthode setter généré publiera la valeur précédente « actuelle » et de conserver la nouvelle. Vous aurez toujours besoin de le libérer dans votre méthode dealloc.

Pour vous accéder à la variable via la propriété, vous devez utiliser .:

self.current = [NSMutableString string]; 

Cela équivaut à appeler [self setString: [string NSMutableString]] (méthode setString sera généré automatiquement).

De même que vous avez affaire à une chaîne mutable ici, il peut être utile d'utiliser copy un attribut pour la propriété au lieu de retain.

+0

Merci pour votre réponse, très appréciée. J'avais pensé utiliser des propriétés mais je supposais qu'elles sont toujours publiques. Il s'avère que j'avais tort (http://swish-movement.blogspot.com/2009/05/private-properties-for-iphone-objective.html), donc je vais probablement passer à des propriétés. –

Questions connexes