1

我对 tableviewcell ( exc_bad_access ) 的内存管理有疑问。
我的一个tableviewcell包括一个加载异步 html 数据(loadHTMLString方法)的 uiwebview ,并且当前控制器被设置为其委托。
当我从导航控制器弹出 tableviewcontroller 太快时,应用程序崩溃。

在我看来,这就是它失败的原因:
- 如果在控制器之前单元释放 => 一切正常,委托仍然有效,我什至可以在其自己的 dealloc 方法中将其委托设置为 nil
- 如果在控制器之后单元释放(我猜测是因为表视图单元格是自动释放的)=> 应用程序崩溃是因为它的委托仍然设置为已释放的控制器

知道如何正确解决这个问题吗?谢谢..

cellForRowAtIndexPath 中的代码:

...
CustomTableViewCell * cCell = (CustomTableViewCell*)cell; 
cCell.myWebView.delegate = self; 
[[cCell myWebView] loadHTMLString:html baseURL:baseURL];
....
4

2 回答 2

1

在释放 Web 视图之前,尝试在单元释放时添加stopLoading 。

于 2012-07-12T13:26:50.453 回答
0

这是一个较老的问题,但它从未真正得到解决,我自己也遇到了。

这发生在我身上:当一个单元格加载了一个将单元格作为其委托的 Web 视图时,视图控制器会崩溃。UIWebView 的文档指出,Web 视图的委托在释放之前应设置为 nil。这似乎也适用于重用的表格视图单元格。

我的解决方案:在您的自定义单元格中覆盖这些:

- (void)prepareForReuse
    {
    [super prepareForReuse];
    self.myWebView.delegate = nil;
    [self.myWebView stopLoading];
    }

- (void)dealloc
    {
    self.myWebView.delegate = nil;
    [self.myWebView stopLoading];
    }

这为我修好了。

于 2013-12-10T23:46:28.980 回答