我正在使用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;
}
答案 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;
返回细胞;
}