这是场景:
- 将 UIViewController (A) 推送到导航堆栈
- 在 viewDidLoad 上,使用 AFNetworking(在整个应用程序中共享的单例 AFHTTPClient)调用异步 GET 以填充视图上的各种用户元素(例如 UILabel)。
- 用户在请求返回之前按下后退按钮 -
假设其他活动视图控制器可能正在发出请求,因此您无法取消所有打开的操作
所以问题 #1 是,您应该跟踪 UIViewController A 发出的打开请求并在用户离开该视图时取消未完成的请求,还是应该让它们完成并忽略它们?由于 AFNetworking 使用块,正在更新的用户元素保留在块内,因此在弹出视图后执行成功/失败块时不会导致崩溃。然而,忽略它们的缺点似乎是不必要的网络流量。
问题 #2 是,您将在哪里执行代码以取消 UIViewController A 所做的操作?viewDidDisappear 似乎不正确,因为用户可能已经前进(将新视图推送到堆栈上)而不是后退(弹出当前视图),在这种情况下,您不想取消打开请求,因为用户可能会来返回当前视图,它不会再次加载。但是,我认为在请求执行时不会调用 dealloc 或 viewDidUnload,因为该块将保留用户元素,所以我认为它不能去那里。
不胜感激对此的想法。您认为最佳实践是什么?