Résumé de ma question: NSURLConnection conserve-t-il son délégué?Est-ce qu'un NSURLConnection conserve son délégué?
question détaillée et scénario:
J'ai une classe personnalisée, appelée JsonDownloader qui prend dans une URL et retourne une NSDictionary du JSON que les déclarations d'URL.
Sur une application iPhone, je fais quelque chose comme ça. (La méthode d'initialisation démarre le processus)
- (void)viewDidLoad {
JsonDownloder *temp = [[[JsonDownloader alloc] initWithURL:urlString returnDataTo:self]];
[temp release];
[super viewDidLoad];
}
Lorsque le JsonDownloader est fait de télécharger et d'analyse, il effectue un rappel au returnDataTo: objet, dans ce cas, l'objet d'appel.
Cela fonctionne très bien. Même si j'introduis un délai de 30 secondes dans la réponse de mes serveurs Web, le JsonDownloader existe toujours et fonctionne correctement. Mes questions sont les suivantes: Qu'est-ce qui empêche JsonDownloader de dépasser la fin du cycle de l'événement? Je le publie explicitement. Mon sentiment est que NSURLConnection doit faire une retenue sur son délégué, mais je n'ai rien vu dans la documentation. Quelqu'un a une idée?
Bonne question et bonne réponse. Je luttais avec cela moi-même, mais j'ai décidé d'ajouter [auto-libération] juste après que le délégué a assigné pour égaliser le nombre de retenue. Puisque le moi est délégué dans ma classe, je n'ai vu aucune raison pour que son compte soit augmenté. Si c'est incorrect, quelqu'un me le fera savoir. – jocull
Je veux juste ajouter - merci. The Missing Manual, partie 327. Il mendie la croyance que ce genre de fait important n'est pas mentionné dans la documentation d'Apple. Je me suis dit qu'il était retenu, mais je n'en étais pas sûr, les docs n'en parlent pas et, dans la plupart des cas, les délégués dans les cadres de Cocoa ne sont pas retenus. C'est l'exception. – n13