2010-04-29 6 views
0

Je suis un peu confus concernant les bassins autorelease lors de la programmation pour l'iPhone. J'ai beaucoup lu et les oppionions me semblent de "Ne pas utiliser" à "Pas de problème à utiliser".Utilisation des pools autorelease pour la méthode fetch

Mon problème spécifique est, je voudrais avoir une classe qui encapsule l'SQLite3 accès, donc je par exemple la méthode suivante:

-(User*)fetchUserWithId:(NSInteger)userId 

Maintenant, dans cette méthode une requête SQL est fait et nouvel objet utilisateur est créé avec les données de la base de données, puis renvoyé. Dans cette classe DB Access, je n'ai plus besoin de cet objet, donc je peux faire une release, mais comme la méthode d'appel en a besoin, je ferais une autorelease, n'est-ce pas?

Alors, est-il correct d'utiliser autorelease ici ou y aurait-il trop de mémoire, si cette méthode est appelée assez fréquemment? Certains sites Web indiquent que le pool autorelease est libéré en premier à la fin de l'application, certains disent, à chaque événement (par exemple, un utilisateur touche quelque chose).

Si je ne devrais pas utiliser autorelease, comment puis-je m'assurer que l'objet est libéré correctement? Puis-je faire une version dans la méthode d'extraction et espérer que l'objet est toujours là jusqu'à ce que la méthode d'appel puisse faire une retenue?

Merci pour votre aide!

Cordialement Matthias

Répondre

1

Vous ne devez jamais libérer quelque chose que vous utilisez toujours; ou que vous revenez à quelqu'un pour son usage. Autorelease est une méthode parfaitement valide sur l'iPhone, et le autoreleasepool est drainé à la fin de chaque itération de la boucle d'exécution (donc, fondamentalement, pour chaque événement).

Questions connexes