2010-02-11 2 views
2

Im utilisé pour la programmation c où je suis responsable de tout libérer, et cet objectif c trucs funky jette quelques clés dans le travail. J'utilise le code ci-dessous.Après avoir utilisé une méthode NSArray * sort *, je suis responsable de la libération du tableau retourné

NSArray *b = [a allObjects]; 
NSArray *c = [b sortedArrayUsingDescriptors:sortDescriptors]; 

Qui est responsable de la libération de "b" et "c". Pour mémoire, "a" est un NSSet. Si je les libère manuellement, il semble planter l'application, mais je ne suis pas sûr à 100%, donc je pensais que je demande.

Merci.

Répondre

10

Ces deux appels renvoient des objets auto-libérés, de sorte que vous êtes en sécurité. Ils seront libérés pour vous (dans le futur, à la fin de la boucle d'exécution actuelle par exemple).

La règle générale est que si vous n'appelez pas explicitement retain, alloc, ou l'une des méthodes copy de l'objet, vous obtenez un objet autoreleased retour de quelque méthode que vous appelez.

Voici un lien vers le memory management documentation.

+2

Bonne réponse de Carl. Une correction: même si 'alloc' et' init' se produisent généralement ensemble, 'alloc' est la méthode réelle qui renvoie un objet que vous possédez et qui doit être libéré ou libéré plus tard. La troisième famille de méthodes qui renvoie un objet que vous possédez est celle qui contient 'copy'. –

+0

+1 pour @Ole, merci pour la clarification. –

Questions connexes