Resumen de mi pregunta: ¿NSURLConnection conserva su delegado?¿Tiene un NSURLConnection conservar su delegado?
pregunta detallada y escenario:
que tienen una clase personalizada, llamada JsonDownloader que se toma en una URL y devuelve un NSDictionary del JSON que los rendimientos de URL.
En una aplicación de iPhone, hago algo como esto. (El método init inicia todo el proceso)
- (void)viewDidLoad {
JsonDownloder *temp = [[[JsonDownloader alloc] initWithURL:urlString returnDataTo:self]];
[temp release];
[super viewDidLoad];
}
Cuando el JsonDownloader se realiza la descarga y el análisis, se realiza una devolución de llamada al returnDataTo: objeto, en este caso, el objeto que llama.
Esto funciona bien. Incluso si presento un retraso de 30 segundos en la respuesta de mi servidor web, el JsonDownloader aún existe y su devolución de llamada es correcta.
Así que mi pregunta es esta: ¿Qué es lo que mantiene JsonDownloader más allá del final del ciclo de eventos? Lo estoy liberando explícitamente.
Mi corazonada es que NSURLConnection debe retener en su delegado, pero no vi nada en la documentación. Alguien tiene ideas?
Gran pregunta y gran respuesta. Estaba luchando con esto yo mismo, pero decidí agregar [auto-lanzamiento] justo después de que el delegado asignara para igualar el conteo retenido. Como el yo es delegado en mi clase, no vi ninguna razón para aumentar su conteo de retenciones. Si eso es incorrecto, alguien hágamelo saber. – jocull
Solo quiero agregar, gracias. The Missing Manual, parte 327. Merece la creencia de que este hecho relativamente importante no se menciona en la documentación de Apple. Pensé que lo estaba reteniendo pero no estaba seguro, los documentos no dicen nada al respecto, y en muchos casos sino en la mayoría de los casos, los delegados en los marcos de Cocoa * * no se retienen. Esta es la excepción. – n13