UITableView Cells没有进行dealloc

时间:2014-01-11 14:13:08

标签: ios objective-c cocoa-touch uitableview

我正在使用显示图像的自定义单元格构建UItableView。问题是当我向下滚动时,前面的单元格似乎没有进行dealloc,并且设备内存正在填满。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";
    CustomTableCellView *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[CustomTableCellView alloc] initWithStyle:UITableViewCellStyleDefault
                                          reuseIdentifier:simpleTableIdentifier];
    }

    Article *tempArticle = [_objects objectAtIndex:indexPath.row];
    cell.titel.text = tempArticle.title;
    cell.subTitle.text = tempArticle.subTitle;
    cell.category.text = tempArticle.category;
    if(tempArticle.imageUrl){
        [cell.image setImageWithURL:[NSURL URLWithString:tempArticle.imageUrl]];
    } else {
        cell.image.image = [UIImage imageNamed:@"video"];
    }

    return cell;
}

enter image description here

2 个答案:

答案 0 :(得分:0)

如上所述,您正在正确设置重用标识符。

也许是因为你正在使用 AFNetworking 库并下载你的手机图像?更准确地定义“填满记忆”。

答案 1 :(得分:0)

我99%确定内存增加是由于图像加载和放大缓存。 AFnetworking它使用NSCache实例来缓存下载的图像,此缓存在内存中执行,当系统确定内存不足时,它将被耗尽,这不是问题。

同样,imageNamed方法以与AFNetworking相同的方式缓存加载的图像。

为了检查您是否有泄漏或某些内容与您的数据无法正常工作,请检查内存是否在您向后滚动后增加内存,如果内存保持不变,则表明您没有问题也没有泄漏(也可以用仪器检查泄漏),缓存的图像是导致内存增加的图像。

同样从堆栈中删除视图控制器(弹出,删除),这将导致文本,标签或其他数据(不是图像)的一些解除分配,如果内存减少(它不会大幅减少)那么你是正确的方式。