Wie gehe ich in einer asynchronen NsurlConnection um?
-
13-09-2019 - |
Frage
Ich bin derzeit asynchron NSURLConnection
mit mehreren UIViews
(Jede Ansicht verhandelt NSURLConnection
als Delegierter). Das Problem, das ich habe, ist, wenn der Benutzer die Ansichten zu schnell wechselt und der Delegierte wird NSZombie
Die App stürzt ab - das ist nsurlConnection hat keinen lebenden Delegierten mehr. Die erste Frage ist also, ob es eine Möglichkeit gibt, dies zu umgehen.
Die zweite Frage ist einfach - wie gehe ich mit Nszombie um? Einfach if(myObject != nil)..
funktioniert überhaupt nicht.
Lösung
Du musst Abbrechen das NSURLConnection
Bevor Sie es entsorgen, ist es Delegierter. Halten Sie einfach einen Hinweis auf die NsurlConnection in Ihrem UIView
Das wirkt als Delegierter und Anruf [urlConnection cancel]
.
Nachdem Sie eine Nachricht veröffentlicht haben, müssen Sie Ihren Zeiger auf NIL einstellen, wenn Sie diesen Zeiger weiterhin verwenden. Als Beispiel:
id myObject = [[SomeObject alloc] init];
/* Some code */
[myObject release];
myObject = nil;
/* Some more code */
if (myObject != nil) {
[myObject doSomething];
}
Beachten Sie jedoch, dass es gültig ist, eine Nachricht an zu senden nil
Sie müssen also die Senden der Nachricht nicht sicher schützen. Es hat einfach keinen Einfluss, wenn myObject == nil
.