我正在使用显示图像的自定义单元格构建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;
}
答案 0 :(得分:0)
如上所述,您正在正确设置重用标识符。
也许是因为你正在使用 AFNetworking 库并下载你的手机图像?更准确地定义“填满记忆”。
答案 1 :(得分:0)
我99%确定内存增加是由于图像加载和放大缓存。 AFnetworking
它使用NSCache
实例来缓存下载的图像,此缓存在内存中执行,当系统确定内存不足时,它将被耗尽,这不是问题。
同样,imageNamed
方法以与AFNetworking
相同的方式缓存加载的图像。
为了检查您是否有泄漏或某些内容与您的数据无法正常工作,请检查内存是否在您向后滚动后增加内存,如果内存保持不变,则表明您没有问题也没有泄漏(也可以用仪器检查泄漏),缓存的图像是导致内存增加的图像。
同样从堆栈中删除视图控制器(弹出,删除),这将导致文本,标签或其他数据(不是图像)的一些解除分配,如果内存减少(它不会大幅减少)那么你是正确的方式。