我有一个 UIViewController 的子类也实现了 UITableViewDelegate。
基本上,会显示一个 UITableView,选择一个单元格会推送一个新 View 。
以下是代码的外观:
// NavigationContentsViewController.h
@interface NavigationContentsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView * newsTable;
UIActivityIndicatorView * activityIndicator;
}
///////////////////////////////////////////////////////////////////////
// placed in NavigationContentsViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger selectedCellItem = indexPath.row;
TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]];
fvController.selectedCellItem = selectedCellItem;
fvController.link = [links objectAtIndex:selectedCellItem];
[self.navigationController pushViewController:fvController animated:YES];
[fvController release]; // #1 if removed everything works fine but getting a leak
fvController = nil; // #2
}
///////////////////////////////////////////////////////////////
// TableViewController.h
@interface TableViewController : UIViewController <UIWebViewDelegate>{
NSInteger selectedCellItem;
IBOutlet UIWebView *myWebView;
NSString *link;
UIActivityIndicatorView *activityIndicator;
}
因此,当用户选择一个单元格时,会推送一个新的 UIWebView。
在 webView 加载完成之前,还会显示一个事件指示器。
我的问题是,如果用户在 webView 完成加载之前选择从 webView 返回到上一个 View (带有表格的 View ),应用程序就会崩溃,并出现以下错误:“[TableViewController respondsToSelector:]:消息发送到已释放的实例 0x4b57460"
如果 webView 已完成加载并且用户选择返回,则一切正常。
我设法通过删除代码中标有 #1 和 #2 的两行来解决这个问题,但随后出现内存泄漏(因为我没有释放 TableViewController)。
仍在尝试了解发生了什么。有任何想法吗?提前致谢。
最佳答案
我怀疑您正在将 TableViewController 设置为 UIWebView 的委托(delegate),并且您在 the documentation 中错过了此消息:
Important: Before releasing an instance of
UIWebView
for which you have set a delegate, you must first set its delegate property tonil
. This can be done, for example, in your dealloc method.
如果您忘记在 dealloc 中删除委托(delegate),即使委托(delegate)不再存在,Web View 最终也可能会尝试发送委托(delegate)消息。繁荣。
关于iphone - Objective C 无法释放 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188174/