3

根据文档,在处理 UIWebView 实例之前,需要将 UIWebView 委托属性设置为 nil。

我的问题是:如果 UIWebView 在 IB 中设置,其委托指向文件所有者,即 viewController。并且 UIWebView 及其超级视图在执行过程中永远不会被释放,是否需要将委托设置为 nil ?

我问这个是因为似乎很难获得对 UIWebView 的引用。

希望懂行的大侠给点提示。

(非弧设置)

4

1 回答 1

6

遵循文档中的建议始终是一种好习惯。在大多数情况下,您的建议通常是正确的:实际上不需要将委托设置为 nil,因为对象将被销毁的唯一时间是执行结束时。但是,这类似于说“我不需要释放这个堆空间,因为它只会在 main 返回之前立即被释放”......

一个更紧迫的问题是如果应用程序收到内存不足警告会发生什么。如果收到内存警告并且UIWebView已卸载并且委托未设置为 nil,那么您最终可能会在幕后发生内存泄漏,具体取决于UIWebView它设置/删除其委托时的操作。

如果您在销毁时将委托设置为 nil,那么当 UIWebView 检测到其委托设置为 nil 时,任何需要发生的事情都会由 UIWebView 处理。如果您不这样做,并且实例被意外破坏(例如,由于内存不足警告),那么一旦警告清除,加载将再次发生,并且UIWebView将运行设置 a 的委托的任何过程两次,中间没有发生“关闭”程序。鉴于他们坚持要在销毁时将委托设置为 nil,我想这表现为内存泄漏或类似的险恶。

于 2012-11-05T02:28:16.593 回答