2010-10-25 18 views
1

J'écris une catégorie NSArray pour inclure le message -objectAtRandom qui retourne un objet d'un index aléatoire (quelque chose de similaire à choice de Python).Objet Autorelease retourné par NSArray?

Dois-je autoriser la libération de cet objet avant de le renvoyer? Je crois que je ne devrais pas, mais je ne suis pas sûr ...

Répondre

3

Selon les règles normales de gestion de la mémoire, non, vous ne devriez pas. Puisque vous utilisez vraisemblablement objectAtIndex: pour renvoyer l'objet, vous n'avez pas besoin de faire votre propre gestion de la mémoire.

0

Je écrirais return [[object retain] autorelease] - cela garantira que, même si le tableau sera libéré, l'utilisateur sera en mesure de travailler avec l'objet jusqu'à la fin du cycle de cycle en cours.

+3

Ceci n'est pas nécessaire. NSArray maintient une référence forte jusqu'à ce qu'il soit retiré du tableau. Si le développeur supprime le tableau, il doit probablement comprendre qu'il libère potentiellement tous les objets qu'il contient. – AdamH

+0

@AdamH, oui, peut-être avez-vous raison. – kovpas

+0

@adam Donc, si l'utilisateur veut s'assurer qu'il ne se terminera pas avec une référence invalide à l'objet, il devrait le conserver et le relâcher une fois terminé. – cfischer