prepareForReuse

时间:2011-03-02 02:10:35

标签: iphone objective-c uitableview

有人可以告诉我如何使用prepareForReuse吗?我一直在寻找几个小时并阅读开发文档。

在我的自定义单元格中,它扩展了UITableViewCell,我有prepareForReuse方法及其调用,但我该如何处理它(有渲染问题)。我这样做吗? 每个标签的截止日期= @“”

@implementation PostTableCustomCellController
@synthesize authorName;
@synthesize deadline;
@synthesize distance;
@synthesize interestedCount;
@synthesize description;
@synthesize avatar;
@synthesize viewForBackground;
@synthesize fetchedResultsController, managedObjectContext;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        // Initialization code
    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void) prepareForReuse {
    NSLog(@"prep for reuse");
    [self clearFields];
}

- (void) clearFields {

    NSLog(@"clearFields was called Jason");


}


- (void)dealloc {
    [super dealloc];
}


@end

3 个答案:

答案 0 :(得分:9)

一旦构造了一个对象,调用任何init方法是不可接受的,因此必须有一些方法可以在重用之前将对象重置回中性状态。这就是prepareForReuse的用途。您可以使用该方法将对象放回到调用init方法后的状态,以便调用代码执行相同的操作,无论是给定新对象还是重用对象。

答案 1 :(得分:1)

在我的一个应用程序中,我有持久对象实例,每行一个,它们知道'他们的'UITableViewCell实例。 (当行可见时,实际上有一行)。

在这种情况下,prepareForReuse只是告诉行对象其UITableViewCell实例即将被释放给其他行对象的机会,即原始行不再在表中有可见的存在图。

答案 2 :(得分:-1)

(一个迟到的答案 - 但对于那些偶然发现这个问题的人来说)

如果您不想继承UITableViewCell并覆盖-(void)prepareForReuse方法,可以考虑使用<UITableViewDelegate>方法:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // prepare cell before it is displayed
}

这将允许您在显示之前prepare单元格。