如何在UITableViewCell中发布UIImageView?

时间:2011-11-24 15:52:17

标签: objective-c cocoa-touch uitableview uiimageview

我在TableViewCell中有UIImage插座,稍后我将在UITableView中使用它。当我在仪器中检查这个时,我在UIImageView上得到了一些内存泄漏。我没有在UITableViewCell中发布UIImageView,因为如果我在tavleViewCell中发布它,我会得到exc_bad_access。

我的问题是我在哪里发布这个UIImageView?

更新

CustomCell.h

@interface CustomCell : UITableViewCell {
IBOutlet UIImageView *customImage;
}

@property(nonatomic, retain) UIImageView *customImage;

@end

CustomViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

cell.customImage.hidden = [[self.customImageList objectAtIndex:indexPath.row] boolValue];

return cell; 
}

3 个答案:

答案 0 :(得分:0)

UITableView缓存单元格以供以后重用。这显示为内存泄漏,但您最终可以重用该单元,因此它不会真正泄露。

当单元格滚动离开屏幕时,您可以执行的是释放自定义UITableViewCell保留的图像视图,但如果在滚动时再次需要图像,则可能导致性能问题。

答案 1 :(得分:0)

首先,让我们来定义你的意思。当我们谈论真正的内存泄漏时,那就是堆已经分配但是在代码中的任何地方都没有任何指针。它真的泄露,丢失,不能重复使用。如果泄漏工具将其识别为泄漏,这意味着它就是这种泄漏,这不仅仅是一种泄漏,而不像某些人所说的那样是漏洞。

如果你没有在泄漏工具中看到它,那么它仍然可能是泄漏,或者可能是另一种类型的内存问题,有些也称为内存泄漏,例如废弃的内存。

在任何情况下,请告诉我们是什么让您称之为泄密,您需要发布代码以获得更多帮助。

答案 2 :(得分:-1)

尝试将其设置为nil,即在dealloc:

self.imageViewName = nil;