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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top