2009-11-02 10 views
0

Eh bien, j'ai un UITextField.Gestion de la propriété UITextField.text

À l'intérieur, il s'agit d'une propriété UITextField.text.

Est-il autorisé à faire:

// Assume we have UITextField * tf somewhere.. 
// now set its text.. 
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ; 

Mon problème est la mémoire. Que se passe-t-il à l'ancienne valeur de la propriété de texte UITextField.

Ne pas que vous devez faire:

// maintain reference to old NSString 
NSString * oldTfText = tf.text ; 

// set the value to the new value you want 
tf.text = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ; 

// release the old NSString now.. 
[ oldTfText release ] ; 

Je pense toujours à Mgmt mémoire comme je le fais dans des conditions normales C. Cela pourrait être le défaut ici.

Répondre

2

UITextField sera responsable de la libération de toutes les anciennes valeurs dont il dispose. Votre problème concerne uniquement votre code et vous avez raison de dire que NSString alloué doit être libéré.

Vous pouvez également utiliser autorelease pour éviter la déclaration supplémentaire.

tf.text = [ [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] autorelease]; 
0

tf.text est un setter. En regardant les fichiers d'en-tête, la propriété est définie:

@property(nonatomic,copy) NSString *text; 

Ainsi, je pense que vous devriez le mettre de cette façon, et laisser le système prendre soin de sa propre copie:

mytext = [ [ NSString alloc ] initWithUTF8String:"Init'd with utf8" ] ; 
tf.text = mytext; 
[mytext release];