【发布时间】:2011-09-06 15:29:36
【问题描述】:
清除 UIWebView 委托的正确方法是什么?
在我的 dealloc 函数中,我添加了
[myWebView setDelegate:nil];
[myWebView release];
第一行是必要的吗?
编辑:如果我的对象不是 UIWebView 而是 NSFetchedResultsController 怎么办?
谢谢
【问题讨论】:
清除 UIWebView 委托的正确方法是什么?
在我的 dealloc 函数中,我添加了
[myWebView setDelegate:nil];
[myWebView release];
第一行是必要的吗?
编辑:如果我的对象不是 UIWebView 而是 NSFetchedResultsController 怎么办?
谢谢
【问题讨论】:
将委托设置为 nil 是一回事。其他同样重要甚至更重要的是,当您不再关心结果并且即将发布包含 UIWebView 的视图时,如何干净地关闭正在加载的 UIWebView。
这是对上述问题和更多问题的一个非常好的答案:How to safely shut down a loading UIWebView in viewWillDisappear?。它将很好地概述 UIWebView 的生命周期。
关于调用stopLoading 的提示:在调用stopLoading 之前,您不必检查是否正在使用isLoading 加载任何内容 - 只需直接调用stopLoading,如果没有加载任何内容,它将不会执行任何操作。
【讨论】:
在上面的代码的情况下。不,您可能不需要清除委托。
但是,如果您有 ClassA 和 ClassB,并且您已将 ClassA 设置为 ClassB 的委托,那么您需要注意的是......当 ClassA 被释放而 ClassB 仍在使用时。
因此,为了处理这个问题,ClassA 将在 ClassA 的 dealloc 方法中从 ClassB 的委托属性中清除(自身)。
【讨论】:
我认为您只需要在发布之前取消所有请求:
[webView stopLoading];
干杯!
【讨论】: