不要依赖viewDidUnload做任何清理工作。这仅在 iOS 6 之前的 iOS 版本中调用,并且仅在由于内存压力而卸载视图时(但不是在您关闭/弹出视图时)。
将您的委托设置为nil在dealloc方法中或viewDidDisappear或任何适当的地方。
与选择哪种方法相关的两个nil警告delegate:
请注意,如果您推送/呈现另一个视图控制器,即使当前的视图控制器尚未被解除,也会调用它viewWillDisappear。viewDidDisappear如果有问题的视图控制器从未推送/呈现另一个视图控制器,则仅依赖这些与消失相关的方法。
如果使用该dealloc技术,请注意,这仅在delegate是weak图像获取器类的属性时才有效(并且委托通常应该是weak)。如果delegate是一个strongorretain属性,那将阻止视图控制器dealloc被调用。
顺便说一句,我收集到您让图像获取继续,即使视图控制器已被解除。您可能不仅想nil取消委托,还想取消请求。这取决于 (a) 您是否使用甚至允许取消的获取(例如NSURLConnectionDataDelegate方法或 AFNetworking 操作),如果是,则 (b) 您是否希望它取消。但是,很容易占用宝贵的网络资源(尤其是在蜂窝连接速度较慢的情况下),即使用户不再需要它,也可以让请求继续进行。这取决于您的应用程序的细节。
无论如何,不要依赖viewDidUnload.