【问题标题】:When pushViewController: pointer being freed was not allocated当 pushViewController: 被释放的指针没有被分配
【发布时间】:2011-08-06 14:20:00
【问题描述】:

我找不到问题!对此的任何帮助将不胜感激: 从 UITableView 我正在推送一个新视图,其中包含一个带有 UIwebView 的视图以访问互联网。单击后退按钮时,我收到下一个错误: 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 !!!
}

【问题讨论】:

    标签: ios objective-c memory-management pushviewcontroller


    【解决方案1】:

    尝试使用autorelease 创建dvController:

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

    然后删除[dvController release] 语句。

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

    我的预感是你的控制器正在被另一个对象释放,而你的对象不知何故变成了它的子视图。我以前在另一种情况下看到过这种行为。

    当然,如果上述更改也导致崩溃,那么存在更深层次的问题,我认为我们需要更多关于 ExternalWebView 的信息。

    【讨论】:

    • 感谢您的回答,现在没有崩溃!
    • 很高兴听到这个消息!您是否使用泄漏工具检查对象是否仍在泄漏?
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多