2010-03-08 5 views

Répondre

1

jupp, ajouter autorelease à la fin

4

Non, ce ne sera pas AutoRelease, vous devez libérer. Si vous utilisiez [NSString stringWithFormat], cependant, il serait auto-libéré.

+0

vraiment? c'est plutôt sympa. généralement pas décrit partout où j'ai vu (et devrait être) – KevinDTimm

+0

@kevindtimm il est décrit dans la documentation SDK. Vérifiez-le un jour, toutes sortes d'autres goodies là-bas. – freespace

+0

Euh, je n'ai pas vu cela documenté non plus, mais une expérience de lotsa indique que la méthode de classe [XXX XXXWithYYY] retournerait normalement un objet autoreleasing. Au début de mon projet iPhone, j'ai rencontré et débogué quelques bogues de surchargés avec ceux ... –

1

oui, alloc == libération (une règle facile à retenir)

+0

Aussi copie. Et vous devez surveiller chaque cas de donner l'arbitre loin. J'aimerais que ce soit si simple ... –

+0

oui, mais je ne réponds qu'à la question originale ... – KevinDTimm

1

Si vous lisez le documentation, vous trouverez la propriété text est copiée - il n'y a pas besoin pour vous de garder ce NSString par exemple autour. Donc la réponse est oui: vous pouvez libérer (automatiquement) cette instance NSString.

0

En fait, cela dépend.

[[NSString alloc] initWithFormat:...]; 

Ceci construira une chaîne avec le nombre de retenue de +1. Si la propriété text est @property(retain) ou @property(copy), alors le debugTestLabel adoptera sa propriété, vous devrez donc le -release (ou le -autorelease) par la suite.

Cependant, si la propriété text est @property(assign), le debugTestLabel ne revendique pas la propriété et vous devez vous assurer que le texte reste plus longtemps que l'étiquette ne l'utilise.

(Si l'étiquette est une sous-classe UILabel il est le premier cas.)

0

La règle est, si la méthode commence par init vous devez release (ou autorelease il). Sinon, il s'agit d'un objet autoreleased (stringWithFormat: par exemple). Donc, dans ce cas, vous devez modifier le code:

debugTestLabel.text = [[[NSString alloc] initWithFormat:@"%g, %g", @"Testing String", @"I am another"] autorelease]; 

ou plus standard,

debugTestLabel.text = [NSString stringWithFormat:@"%g, %g", @"Testing String", @"I am another"]; 
0

Vous devez libérer la chaîne immédiatement après l'utilisation de la chaîne.