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

时间:2011-04-15 19:43:08

标签: ios objective-c memory-management pushviewcontroller

我找不到问题!任何有关这方面的帮助将受到高度赞赏: 从UITableView我正在推送一个包含带有UIwebView的视图的新视图来访问互联网。单击后退按钮时,我收到下一个错误:对象0x3d438的malloc: * 错误:未分配被释放的指针。 但是,当我评论最后一行(当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 !!!
}

1 个答案:

答案 0 :(得分:0)

尝试使用dvController创建autorelease

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

然后删除[dvController release]语句。

如果您使用Leaks工具运行Instruments并确认您实际上没有泄漏dvController,则确认您没有泄漏。

我的预感是你的控制器被另一个对象释放,你的对象以某种方式变成了子视图。在另一种情况下,我之前已经看到过这种行为。

当然,如果上述变化也会导致崩溃,那么就会出现更深层次的问题,我认为我们需要更多关于ExternalWebView的信息。