dequeueReusableCellWithIdentifier: 在我的 UITableViewCell 子类中调用初始化程序吗?
Posted
技术标签:
【中文标题】dequeueReusableCellWithIdentifier: 在我的 UITableViewCell 子类中调用初始化程序吗?【英文标题】:Does dequeueReusableCellWithIdentifier: call an initializer in my UITableViewCell subclass? 【发布时间】:2012-06-15 18:39:56 【问题描述】:我有一个 UITableViewController 子类,它的原型单元在情节提要中模拟。
cellForRowAtIndexPath
委托方法中有相当多的代码用于设置单元格。问题是,如果单元格刚刚从重用池中出列,我不需要其中的大部分内容,因为当单元格第一次出列时,它已经完成了。我不能在情节提要中做到这一点,因为有些属性我只能以编程方式访问。
当 UITableViewController 从情节提要中获取原型单元格时,它是否会在我的 UITableViewCell 子类中调用初始化程序?我试过(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
,但这似乎不是过程的一部分。
【问题讨论】:
【参考方案1】:当 UITableView 实例调用 dequeueReusableTileWithIdentifier:
时,单元格不会重新初始化。相反,在该调用中,出队的 UITableViewCell 将调用-(void)prepareForReuse
。这是因为重新初始化单元的成本很高,如果我们可以提供一种更简单的方法来准备其重用(嗯,嗯,明白了吗?),它可以节省大量的 CPU 工作。
所以,如果您使用自定义单元格,请覆盖 UITableViewCell prepareForReuse
。
【讨论】:
【参考方案2】:我可能没有正确表达我的问题,但我在这里寻找的实际上是(void)awakeFromNib
。
当单元格出列而不是重用时调用一次。允许我以编程方式进行一些在情节提要中没有意义的设置。
【讨论】:
(vodi)awakeFromNib 非常适合您只想发生一次的事情,例如向 UILabel 添加手势识别器。【参考方案3】:因为您正在从情节提要(nib 文件)加载(反序列化)单元格,所以调用了 -[UITableViewCell initWithCoder:]
方法。
【讨论】:
以上是关于dequeueReusableCellWithIdentifier: 在我的 UITableViewCell 子类中调用初始化程序吗?的主要内容,如果未能解决你的问题,请参考以下文章