Hier tauchte ist ist das Szenario:offene Asynchron Webanfragen Umgang mit, wenn UIViewController (AFNetworking)
-A UIViewController (A) auf den Navigationsstapel
-Auf viewDidLoad ein Asynchron-GET AFNetworking genannt wird gedrückt wird (a Singleton AFHTTPClient in der gesamten Anwendung geteilt), um verschiedene Benutzerelemente in der Ansicht zu füllen (sagen wir ein UILabel).
-Der Benutzer drückt die Zurück-Taste, bevor die Anforderung
-Assume andere aktive Ansicht gibt Controller-Anfragen machen können, so dass Sie nicht alle offenen Operationen abbrechen
So 1 Frage # ist, sollten Sie die offenen Anfragen verfolgen von UIViewController A gemacht und die ausstehenden löschen, wenn der Benutzer diese Ansicht verlässt, oder sollten Sie sie beenden und ignorieren sie? Da AFNetworking Blöcke verwendet, bleiben die aktualisierten Benutzerelemente im Block erhalten und verursachen daher keinen Absturz, wenn der Erfolg/Fehler-Block nach dem Aufrufen der Ansicht ausgeführt wird. Der Nachteil, sie zu ignorieren, scheint jedoch ein unnötiger Netzwerkverkehr zu sein.
Frage 2 ist, wo würden Sie den Code ausführen, um die von UIViewController A durchgeführten Operationen abzubrechen? viewDidDisappear scheint nicht richtig zu sein, weil der Benutzer möglicherweise vorwärts gegangen ist (eine neue Ansicht auf den Stapel geschoben hat) statt zurück (die aktuelle Ansicht). In diesem Fall möchten Sie die offenen Anfragen nicht abbrechen, weil der Benutzer kommen könnte zurück zur aktuellen Ansicht und es wird nicht erneut geladen. Ich glaube jedoch nicht, dass dealloc oder viewDidUnload aufgerufen wird, während die Anfrage ausgeführt wird, da der Block die Benutzerelemente beibehalten wird, so dass ich nicht glaube, dass er dorthin gehen kann.
Würde mich über diese Gedanken freuen. Was halten Sie für eine gute Praxis?
Randbemerkung: viewDidUnload hat nichts mit der Retain-Anzahl seines View-Controllers zu tun. Es wird aufgerufen, wenn der Ansichtscontroller seine Ansicht loswerden möchte (und möglicherweise später erneut lädt). Dies passiert beispielsweise bei Offscreen-View-Controllern in einer Registerkarte oder einem Navigations-Controller, wenn Sie eine Speicherwarnung erhalten. So kann es während Ihrer Anfragen aufgerufen werden. – rickster