【发布时间】:2011-03-04 00:00:53
【问题描述】:
我有一个 UIViewController 的子类也实现了 UITableViewDelegate。
基本上,会显示一个 UITableView,选择一个单元格会推送一个新视图。
以下是代码的外观:
// 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 完成加载之前,还会显示一个 Activity Indicator。
我的问题是,如果用户在 webView 完成加载之前选择从 webView 返回到上一个视图(带有表格的视图),则应用程序崩溃,出现此错误:“[TableViewController respondsToSelector:]:消息发送到已释放实例 0x4b57460"
如果 webView 已完成加载并且用户选择返回,则一切正常。
我设法通过删除代码中标有 #1 和 #2 的两行来解决此问题,但随后出现内存泄漏(因为我没有释放 TableViewController)。
仍在尝试了解正在发生的事情。有任何想法吗?提前致谢。
【问题讨论】:
标签: iphone objective-c memory-leaks crash