根据 documentation ,在处理 UIWebView 实例之前,需要将 UIWebView 委托(delegate)属性设置为 nil。
我的问题是:如果 UIWebView 是在 IB 中设置的,并且它的委托(delegate)指向作为 viewController 的文件所有者。并且 UIWebView 和它的 superview 在执行过程中永远不会被处理掉,是否需要将委托(delegate)设置为 nil ?
我问这个是因为似乎很难获得对 UIWebView 的引用。
希望有懂行的人指点一下。
(非弧设置)
最佳答案
遵循文档中的建议始终是一种很好的做法。在大多数情况下,您的建议通常是正确的:实际上不需要将委托(delegate)设置为 nil,因为只有在执行结束时才会销毁对象。 但是,这类似于说“我不需要释放这个堆空间,因为它只会在 main 返回之前立即被释放”......
一个更紧迫的问题是如果应用程序收到内存不足警告会发生什么。如果收到内存警告并且 UIWebView
被卸载并且委托(delegate)未设置为 nil,那么您可能会在后台发生内存泄漏,具体取决于 UIWebView
在设置/删除其委托(delegate)时执行。
如果您在销毁时将委托(delegate)设置为 nil,那么当 UIWebView 检测到其委托(delegate)设置为 nil 时,无论需要发生什么,它都会处理。如果你不这样做,并且实例被不可预测地销毁(比如,由于内存不足警告),那么一旦警告被清除,加载将再次发生,无论采取什么程序来设置 UIWebView
的委托(delegate)将运行两次,中间不会发生“关闭”过程。鉴于他们坚持要在销毁时将委托(delegate)设置为 nil,我认为这表现为内存泄漏或类似的险恶事件。
关于iphone - 将 UIWebView 委托(delegate)属性设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225112/