2

J'ai une vue qui affichera les images téléchargées et le texte. Je voudrais gérer tout le téléchargement asynchrone en utilisant ASIHTTPRequest, mais je ne suis pas sûr de savoir comment notifier la vue lorsque les téléchargements sont terminés ...Gestion de la mémoire et opérations asynchrones: quand un objet devient-il nul?

Si je passe mon contrôleur de vue en tant que délégué de l'ASIHTTPRequest, et alors ma vue est détruite (l'utilisateur s'en va) va-t-il échouer gracieusement quand il essayera de signaler mon contrôleur de vue parce que le délégué est maintenant nul?

à savoir si je fais ceci:

UIViewController *myvc = [[UIViewController alloc] init]; 
request.delegate = myvc; 
[myvc release]; 

Do myvc et request.delegate == maintenant un pointeur à zéro?

C'est le problème d'être autodidacte ... Je suis un peu flou sur certains concepts de base.

D'autres idées pour gérer cela sont les bienvenues.

Répondre

3

mise à jour: En regardant le source code for ASIHTTPRequest, il ne pas conserver son délégué, de sorte que votre code soit doivent faire en sorte que le délégué n'a pas été publié ou mis à nil la propriété délégué de la demande avant la libération votre contrôleur.

Si vous allez avoir plusieurs requêtes HTTP asynchrone cours d'exécution, il peut être une bonne idée de créer une classe HTTPRequestManager d'agir en tant que délégué pour tous de vos requêtes HTTP. Cette classe HTTPRequestManager resterait en mémoire pendant toute la durée de vie de votre application, et elle pourrait prendre soin d'échouer gracieusement si/quand vos contrôleurs de vue sont libérés.

Je voudrais ajouter une précision sur la gestion de la mémoire de Cocoa. Il est important de se rappeler qu'un objet publié est et non automatiquement défini sur nil. L'envoi d'un message à nil est parfaitement légal (et ne fait simplement rien), mais envoyer un message à un objet supprimé est un comportement non défini. Garder un pointeur sur un objet supprimé demande des problèmes, et de tels pointeurs vivants/morts sont appelés zombies.

+0

Merci beaucoup pour cette réponse. Très utile. Ma stratégie actuelle est une file d'attente de téléchargement partagée, mais chaque contrôleur supprime ses téléchargements de la file d'attente s'il est fermé. Semble fonctionner bien jusqu'à présent ... –

Questions connexes