查看UIWebView docs,它说
在发布已设置委托的UIWebView实例之前,必须首先将UIWebView委托属性设置为nil,然后再处理UIWebView实例。这可以在例如处理UIWebView
的dealloc方法中完成
我正在UITableView单元格上轻松创建webview。我不知道怎么做“设置委托给nil”位,因为我没有在推送到导航堆栈后跟踪UIWebView。我会想,UIWebView的dealloc方法无论如何都会在委托上调用release?
这就是我正在做的事情:
UIWebView *webView = [[UIWebView alloc] init];
UIViewController *viewController = [[UIViewController alloc] init];
// Start the webview loading, etc
...
// set the delegate
[webView setDelegate:self];
// Add the webview to the viewcontroller
[viewController setView:webView];
[[self navigationController] pushViewController:viewController animated:YES];
[webView release];
[viewController release];
我觉得我应该写
[webView release];
[viewController release];
[self release]; // Releasing the delegate as per the docs.
但这看起来有点尴尬,还是我正确地解释了它?
答案 0 :(得分:3)
没有。 webView不会释放/保留它的委托它只分配它
UIWebView.h:
@property(nonatomic,assign) id<UIWebViewDelegate> delegate;
你可以在[webView setDelegate:self]之前和之后检查[self retainCount] 它将是相同的
答案 1 :(得分:2)
刚刚发现这个,现在已经老了,但也许答案对某人有用。
文档是正确的,您应该在发布webview之前将委托引用设置为nil。
在您的代码示例中,您将子类化UIViewController,并在子类中重写-dealloc方法以包含视图委托的nullify。
例如:
- (void)dealloc {
// Clear the webview delegate
self.view.delegate = nil;
[super dealloc];
}
HTH