Como lidar com o NSZombies em um nsurlConnection assíncrono?
-
13-09-2019 - |
Pergunta
Estou atualmente usando de forma assíncrona NSURLConnection
com vários UIViews
(Cada vista lida NSURLConnection
como delegado). O problema que tenho é quando o usuário troca de visualizações muito rápido e o delegado se torna NSZombie
O aplicativo trava - ou seja, o nsurlConnection não tem mais delegado vivo. Então, a primeira pergunta é se há uma maneira de contornar isso?
A segunda pergunta é simples - como faço para lidar com o nszombie? Simples if(myObject != nil)..
não funciona.
Solução
Você precisa cancelar a NSURLConnection
Antes de descartar, é delegado. Basta manter uma referência ao nsurlConnection em seu UIView
que atua como um delegado e chamado [urlConnection cancel]
.
Depois de lançar uma mensagem, você precisa definir seu ponteiro como nulo se continuar usando esse ponteiro. Como um exemplo:
id myObject = [[SomeObject alloc] init];
/* Some code */
[myObject release];
myObject = nil;
/* Some more code */
if (myObject != nil) {
[myObject doSomething];
}
Observe, no entanto, que é válido enviar uma mensagem para nil
Portanto, você não precisa proteger a mensagem que envia a mensagem. Simplesmente não terá nenhum efeito se myObject == nil
.