2010-08-27 4 views
1

Je me demandais, quel (le cas échéant) est la différence entre la création d'objets à l'aide:Quelle est la différence entre un [[alloc] init] et un [[chose] retain]?

NSThing *thing = [[NSThing alloc] initWithObject:object]; 

vs

NSThing *thing = [[NSThing thingWithObject:object] retain]; 

est-il une différence dans le fonctionnement de la gestion de la mémoire? Aussi, quand est-il courant d'utiliser l'un par rapport à l'autre?

Répondre

8

Allouer et initialisant un objet est légèrement plus efficace, parce que thingWithObject: fera un alloc, puis init, puis autorelease que vous contrez avec un retain, de sorte que vous ajoutez quelque chose à la piscine autorelease. La première option implique uniquement un alloc et un init. Personnellement, j'utilise le alloc explicite quand je veux être clair que la vie de l'objet sera traitée par moi, et j'utilise les méthodes de commodité (thingWithThing:) pour tout objet dont je n'aurai pas besoin en dehors de la portée est créé en.

Par exemple, l'allocation explicite et l'initialisation dans une boucle est généralement préférée, de sorte que vous n'inondez pas le pool de libération automatique. J'utilise également explicitement alloc + init plutôt que thingWithThing: + retain pour les objets qui doivent survivre à une itération de la boucle d'exécution.

Questions connexes