Come gestire NSZombies in un NSURLConnection asincrono?
-
13-09-2019 - |
Domanda
Attualmente sto usando in modo asincrono NSURLConnection
con diversi UIViews
(ogni vista gestisce NSURLConnection
come delegato). Il problema che ho è quando l'utente passa vista troppo veloce e il delegato diventa NSZombie
l'applicazione si blocca - cioè NSURLConnection non ha delegato vivere più. Quindi, la prima domanda è se c'è un modo per aggirare questo?
La seconda domanda è semplice - come faccio a gestire NSZombie? Semplice if(myObject != nil)..
non funziona affatto.
Soluzione
È necessario annulla il NSURLConnection
prima di smaltire che del delegato. Basta tenere un riferimento al NSURLConnection nel vostro UIView
che agisce come delegato e call [urlConnection cancel]
.
Dopo aver rilasciato un messaggio è necessario impostare il puntatore ad esso a zero se si continua utilizzando tale puntatore. Per fare un esempio:
id myObject = [[SomeObject alloc] init];
/* Some code */
[myObject release];
myObject = nil;
/* Some more code */
if (myObject != nil) {
[myObject doSomething];
}
Avviso però che è valido per inviare un messaggio a nil
quindi non è necessario per salvaguardare l'invio del messaggio. Semplicemente non avrà alcun effetto se myObject == nil
.