iphone - 将 UIWebView 委托(delegate)属性设置为 nil

标签 iphone objective-c cocoa

根据 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/

相关文章:

iphone - 如何检测图像中的任意 4 边多边形并将其调整为矩形?

objective-c - UIImageview自定义闪屏框架问题

objective-c - 在标准 NSWindow 上创建自定义标题栏

ios - 显示远程通知期间应用崩溃

cocoa - 有没有办法强制 AppKit 在窗口菜单中包含我的无边框 NSWindow 子类?

swift - 代码 : Swift strange behaviour and errors

iphone - 从推送通知打开应用程序时,如何转到某个 View ?

iphone - NSInvocationOperation 调用下载 XML 文件以存储在本地的方法

cocoa - OS X 原生安装上可用的库列表?

iphone - MonoTouch - 有人用过这个吗?