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