这是否会导致内存泄漏?如何阻止它?

时间:2010-12-08 14:46:42

标签: iphone objective-c uitableview memory-leaks uiviewcontroller

我使用UIViewController XIB在IB中创建我的UITableViewCell然后我用这样的代码实现它:

    if(cell == nil)
    {
        UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"TotalViewCell" bundle:nil];
        cell = (TotalViewCell *)viewController.view;
        //[viewController release];
    }
    [[cell totalButton] setTitle:@"$100,000" forState:UIControlStateNormal];

    // Action when totalButton is tapped
    [[cell totalButton] addTarget:self action:@selector(showTotalDetail:) forControlEvents:UIControlEventTouchUpInside];

    return cell;

通常,我会释放viewController,但是我在该单元格中放置了一个UIButton,当用户点击按钮时,会调用showTotalDetail。这是showTotalDetail的代码:

-(void)showTotalDetail:(id)sender
{
    // Move the totalTableView up!
    CGRect totalDetailTableViewFrame = CGRectMake(20, 200, 280, 200);
    [totalTableView setFrame:totalDetailTableViewFrame];

    // Reload the new totalTableView
    [self viewWillAppear:YES];
}

该函数基本上调整了tableView的大小,并将其移动到屏幕上的其他位置。所以,如果我发布了viewController,我会收到EXC_BAD_ACCESS错误。如果我不释放它,它可以工作,但我担心我会有内存泄漏。

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:3)

您为每个UIViewController创建了UITableViewCell?这是非常非标准的行为。如果你需要自定义UITableViewCell的行为,那么将它子类化为使用视图控制器可能更好。

如果您需要从笔尖加载表格视图单元格,请查看Apple的Table View Programming Guide for iOS。那个例子没有使用视图控制器。

至于你的问题:你是对的,在这种情况下,UIViewController会泄漏。