0

UITableViewCell在我的应用程序中有:

@interface ResultCell : UITableViewCell {
IBOutlet UILabel *name;
IBOutlet UILabel *views;
IBOutlet UILabel *time;
IBOutlet UILabel *rating;
IBOutlet UILabel *artist;

IBOutlet UIImageView *img;
}

@property (nonatomic, retain) UILabel *name;
@property (nonatomic, retain) UILabel *views;
@property (nonatomic, retain) UILabel *time;
@property (nonatomic, retain) UILabel *rating;
@property (nonatomic, retain) UILabel *artist;

@property (nonatomic, retain) UIImageView *img;

@end

所有这些都IBOutlet在 Xib 文件中连接到UILabel....

这就是我创建每个单元格的方式:

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

if (cell == nil){
    UIViewController *vc = [[[UIViewController alloc] initWithNibName:@"ResultCell" bundle:nil] autorelease];
        cell = (ResultCell *) vc.view;
}

cell.name.text = item.name;
cell.views.text = item.viewCount;
cell.rating.text = [NSString stringWithFormat:@"%d%%",item.rating];
cell.time.text = item.timeStr;
cell.artist.text = item.artist;

我想知道在ResultCell课堂上我是否需要实现一个dealoc方法并释放UILabel?或者没关系,就像我所做的那样?我正在使用非 ARC,因为它是一个旧项目。

4

5 回答 5

2

是的,每个保留的属性或实例变量都必须被释放,IBOutlets 也不例外。因为您使用属性,所以最好的方法是:

-(void)dealloc {
    self.name = nil;
    self.views = nil;
    //... and so on
    [super dealloc];
}

顺便说一句,您不需要像这样为您的属性声明“冗余”实例变量:

IBOutlet UILabel *name;

很久以前就需要它(XCode 3 时代的 AFAIR),但现在编译器将为每个声明的属性自动生成它们。

于 2013-05-08T09:14:26.903 回答
0

是的,您必须在类中编写dealloc方法ResultCell来释放您合成的对象以避免内存泄漏。如需更多了解,请参阅链接http://www.raywenderlich.com/4723/how-to-make-an-interface-with-horizo​​ntal- tables-like-the-pulse-news-app-part-2

于 2013-05-08T09:14:07.287 回答
0

您可以将自定义表格视图单元中的所有标签设置为分配,如果需要保留它,您必须在 dealloc 方法中释放并在 .It 中分配 nil。viewDidUnload它可以避免内存泄漏。

于 2013-05-08T09:10:27.920 回答
0
  1. 您将类型转换UIViewResultCell,而不是使用单元格标识符创建UITableViewCell实例。
  2. dequeueReusableCellWithIdentifier:将始终返回nil,从而创建大量UIViewController实例
  3. 由于您正在返回UIViewController视图,因此内存管理将变得棘手。您还需要在表格视图释放单元格后释放视图控制器实例。这将需要存储所有 vc 实例并在以后释放它们。目前所有 vc 实例都导致内存泄漏。

为避免这些不必要的并发症,您需要遵循标准技术。话虽如此,您需要为单元格创建单独的 XIB 和类文件,使用 UINib 从 xib 加载表格视图单元格。请参阅本教程

干杯!
阿马尔

于 2013-05-08T09:41:37.103 回答
-1

使用类似的东西 -

ResultCell *containerView = [[[NSBundle mainBundle] loadNibNamed:@"ResultCell"  owner:self    options:nil] lastObject];

代替

UIViewController *vc = [[[UIViewController alloc] initWithNibName:@"ResultCell" bundle:nil] autorelease];

确保您将ResultCell.xib文件的所有者设为 ResultCell班级。

的,和 是属性UILabel,它们应该在类的方法中释放。UIImageViewretaineddeallocResultCell

于 2013-05-08T09:13:39.153 回答