Objective c 如何在UITableViewCell中释放UIImageView?

Objective c 如何在UITableViewCell中释放UIImageView?,objective-c,cocoa-touch,uitableview,uiimageview,Objective C,Cocoa Touch,Uitableview,Uiimageview,我在TableViewCell中有UIImage插座,稍后我将在UITableView中使用它。当我在instruments中检查时,UIImageView上出现了一些内存泄漏。我不会在UITableViewCell中释放UIImageView,因为如果我在tavleViewCell中释放它,我会获得exc_bad_访问权限 我的问题是在哪里发布这个UIImageView 更新 CustomCell.h @interface CustomCell : UITableViewCell { IBOu

我在TableViewCell中有UIImage插座,稍后我将在UITableView中使用它。当我在instruments中检查时,UIImageView上出现了一些内存泄漏。我不会在UITableViewCell中释放UIImageView,因为如果我在tavleViewCell中释放它,我会获得exc_bad_访问权限

我的问题是在哪里发布这个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; 
}

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

self.imageViewName = nil;

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


您可以做的是释放自定义UITableViewCell在屏幕外滚动时保留的imageview,但如果在滚动时再次需要该图像,则可能会导致性能问题。

首先,让我们定义一下您的意思。当我们谈论一个真正的内存泄漏时,堆已经被分配,但在代码中的任何地方都不再有指向它的指针。它确实泄漏、丢失,并且不能重复使用。如果泄漏工具将其识别为泄漏,这意味着这是一种泄漏,而不是像一些人所建议的那样,只是一种可以容忍的泄漏,也不是一种虚假的泄漏

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


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

据我所知,您使用的是UITableViewCell子类。您应该对其代码进行pst,包括接口定义。您应该在单元格的dealloc中释放单元格拥有的对象。该版本不应出现异常。如果您遇到异常,那么代码中的保留/释放平衡就有问题了。我想这就解释了这个问题。谢谢你,我会保持原样。只要你不给我们更多信息,这个答案只是一个假设。我确实在我自己的应用程序中追踪到了明显的内存泄漏,但发现我的UITableView单元格上唯一剩余的保留来自UITableView,即使这些细胞从屏幕上滚下,不再可见,它也会保留下来。但是,是的,这只是一个假设,这就是OP正在发生的事情。好吧,那么是时候分享一些代码了,这样我们就知道你在说什么了,因为这听起来很直截了当,你永远不应该在dealoc中引用self。使用[imageViewName release]代替self.imageViewName=nil;imageViewName=nil;不正确,如果你合成了你的财产,这是惯例。通过合成属性创建的setter将负责释放该属性。i、 属性(非原子,保留)NSDate*时间戳将生成以下setter
-(void)setTimestamp:(NSDate*)newValue{if(timestamp!=newValue){[timestamp release];timestamp=[newValue retain];}}