当pushViewController:释放的指针未分配时

问题描述

我找不到问题!对此的任何帮助将不胜感激: 我正在从UITableView推送一个新视图,该视图包含一个带有UIwebView的视图以访问Internet。单击“后退”按钮时,我得到下一个错误:malloc:*对象0x3d438的错误:未分配要释放的指针。 但是,当我评论最后一行(发布dvController时)时,一切正常!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [self setCellIdxPathSelected:indexPath];

    Nsstring *selectedID = [[theList objectAtIndex:indexPath.row] theWebID]; 

    ExternalWebView *dvController = [[ExternalWebView alloc] initWithNibName:@\"ExternalWebView\" bundle:nil];

    dvController.hidesBottomBarWhenPushed= YES;
    dvController.theWebID= selectedID;

    NSLog(@\"El ID: %@\",selectedID);

    [self.navigationController pushViewController:dvController animated:YES];

    [dvController release]; // ERROR !!!
}
    

解决方法

尝试用
autorelease
创建
dvController
ExternalWebView *dvController = [[[ExternalWebView alloc] 
       initWithNibName:@\"ExternalWebView\" bundle:nil] autorelease];
然后删除“ 4”语句。 如果您使用“泄漏”工具运行仪器并确认您实际上并未泄漏dvController,则将确认您没有泄漏。 我的直觉是您的控制器被另一个对象释放,而该对象已以某种方式成为其子视图。在另一种情况下,我之前已经看到过这种行为。 当然,如果上述更改也导致崩溃,则存在一个更深层次的问题,我认为我们需要更多有关
ExternalWebView
的信息。