2010-04-09 5 views
1

Lors du développement pour l'iPhone, j'ai eu une fuite de mémoire tenace que j'ai finalement suivi jusqu'à NSXMLParser. Cependant, en cherchant cela, j'ai pensé à changer peut-être beaucoup de mes méthodes de commodité pour allouer/libérer. Y a-t-il une bonne raison de le faire? Dans une grande application, je peux voir comment libérer la mémoire vous-même rapidement est une meilleure idée, mais dans une petite application est-il une autre différence entre les deux méthodes.iPhone, méthode pratique ou Alloc/Release?

NSNumber *numberToAdd = [NSNumber numberWithInt:intValue]; 
dostuff ... 

OU

NSNumber *numberToAdd = [[NSNumber alloc] initWithInt:intValue]; 
doStuff ... 
[numberToAdd release]; 

acclamations gary.

Répondre

4

Il n'y a pas de différence de gestion de la mémoire entre ces deux méthodes. Dans une application graphique, un NSAutoreleasePool est créé et détruit à chaque tour de la boucle d'exécution, de sorte que les petits objets comme celui-ci seront probablement détruits en quelques microsecondes. La seule fois où je pourrais le voir est important si vous êtes sur un thread secondaire et que vous êtes sur le point de créer un TON d'objets auto-libérés. Cependant, vous êtes toujours le bienvenu pour créer et détruire vos propres pools d'autorelease.

+0

Très apprécié Dave, juste ce que je recherchais. Je voulais juste vérifier que j'étais sur la bonne voie. – fuzzygoat

+0

Merci, votre réponse a été vraiment utile :) – abelito

0

[NSNumber numberWithInt: 1] === [[[NSNumber alloc] initWithInt: 1] autorelease]

Même si numberWithInt: est plus pratique, il est plus de code à exécuter. En interne, autorelease colle cet objet sur un tableau toujours croissant.

Si vous êtes dans une boucle faisant beaucoup d'allocations, vous pourriez bénéficier de la gestion de la mémoire vous-même. Dans le cours normal des opérations d'assurance-chômage, le coût de l'autorelease est négligeable.

La définition réelle des lots dépend de vous et d'un profileur. À quel moment l'avantage d'un code plus lisible perd-il au profit du code plus rapide?

Questions connexes