Cómo manejar NSZombies en un NSURLConnection asíncrona?
-
13-09-2019 - |
Pregunta
Actualmente estoy usando de forma asíncrona con varios NSURLConnection
UIViews
(todas las referencias de vista NSURLConnection
como delegado). El problema que tengo es cuando el usuario cambia vistas demasiado rápido y el delegado se convierte en NSZombie
la aplicación se bloquea - que es NSURLConnection no tiene delegado vivir más. Así, la primera pregunta es si hay una manera de evitar esto?
La segunda pregunta es simple - ¿Cómo manejo NSZombie? if(myObject != nil)..
sencilla no funciona en absoluto.
Solución
Es necesario cancelar la NSURLConnection
antes de deshacerse de él delegado. Basta con mantener una referencia a la NSURLConnection en su UIView
que actúa como delegado y [urlConnection cancel]
llamada.
Después de soltar un mensaje tiene que establecer el puntero a ella a cero si continúa utilizando ese puntero. Como un ejemplo:
id myObject = [[SomeObject alloc] init];
/* Some code */
[myObject release];
myObject = nil;
/* Some more code */
if (myObject != nil) {
[myObject doSomething];
}
Aviso sin embargo, que es válida para enviar un mensaje a nil
por lo que no es necesario para salvaguardar el envío de mensajes. Simplemente, no tendrá ningún efecto si myObject == nil
.