如何使用UITableViewController释放内存

时间:2009-12-21 09:00:17

标签: iphone

我正在使用Instruments来监控内存使用情况。我注意到我的UITableViewController上的内存总是增加而不再释放。我不明白为什么。下面我列出我的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    int row =  [indexPath section];
    static NSString *CellIdentifier = @"ApplicationCell";
    BookCell *cell = (BookCell *)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"BookCell" owner:self options:nil];
        cell = bookCell;
        self.bookCell=nil;
    }   
    Book *book = [books objectAtIndex:row];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.bookNameLabel.text = book.author;  
    cell.bookPriceLabel.text = book.price;
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
        return cell;
}

3 个答案:

答案 0 :(得分:0)

回答#1:

如果你指的是内存分配而不是泄漏内存,这是一个建议。

实施 viewDidUnload 以发布不再需要的viewcontroller部分。通常,您可以在 viewDidLoad (或 loadView ,如果您不使用xib文件)中重新显示这些对象。

你可以通过将NSLog语句置于 viewDidUnload 和iphone模拟器中并点击“硬件 - >模拟内存警告”来显示这一点,除非它们已经卸载,否则大多数不可见的视图控制器都会运行 viewdidunload 方法。

回答#2:

如果你指的是内存泄漏,那么我怀疑你加载表格单元的方式是泄漏内存。 Here is a good reference for loading tablecells from xibs。你的方法可能是正确的,我只是不熟悉它。

答案 1 :(得分:0)

您的代码对我来说看起来没有泄漏。

我还注意到以下行看起来应该导致提前释放您的自定义单元格对象(假设bookCell属性被声明为“retain”):

self.bookCell=nil;

我建议完全删除它。您也可以将其更改为(假设实例变量名称与属性名称匹配):

bookCell=nil;

答案 2 :(得分:0)

...枝

试试这种方式,我希望我会工作

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { int row = [indexPath section];

    if(cell == nil){     [[NSBundle mainBundle] loadNibNamed:@“BookCell”所有者:self选项:nil];     cell = bookCell;     self.bookCell =无; }
    书* book = [books objectAtIndex:row]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.bookNameLabel.text = book.author;
    cell.bookPriceLabel.text = book.price; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;     返回细胞; }