【问题标题】:IOS TableViewCell exc_bad_access autorelease errorIOS TableViewCell exc_bad_access 自动释放错误
【发布时间】:2012-07-12 10:28:17
【问题描述】:

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

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

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

cellForRowAtIndexPath 中的代码:

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

【问题讨论】:

  • 能给个sn-p代码吗?
  • 要检查您的猜测,您可以在单元格和 viewController 类 dealloc 中添加 NSLog,我确定自动释放的单元格在控制器之前被释放。
  • 在调用 cell dealloc 方法中的 NSLOG 之前应用程序崩溃。我猜想自动释放池是在控制器被释放后出现的。显然,当控制器被按下时,我真的非常快地点击返回按钮。如果我评论“[[cCell myWebView] loadHTMLString:html baseURL:baseURL];”一切正常..
  • 发布单元格的代码。这里还有其他问题。

标签: ios memory-management uitableview exc-bad-access


【解决方案1】:

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

【讨论】:

  • @user1427835 请发布回溯。
  • *** -[MyCustomViewController respondsToSelector:]:消息发送到已释放实例 0x5c607f0 [unknown](gdb)
  • @user1427835 这个控制器是你的 webViews 的代表吗?
【解决方案2】:

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

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

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

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

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

这为我解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2010-10-08
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多