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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top