为啥不调用基于 nib 的自定义表格单元格的 init 方法
Posted
技术标签:
【中文标题】为啥不调用基于 nib 的自定义表格单元格的 init 方法【英文标题】:why does the init-method of a custom nib-based table cell not get called为什么不调用基于 nib 的自定义表格单元格的 init 方法 【发布时间】:2011-08-04 13:19:06 【问题描述】:我有一个基于 nib 的表格视图单元,它是在界面生成器中创建的。我将表格视图单元格的类设置为从UITableViewCell
扩展的FooTableViewCell
。
在FooTableViewCell
中,我像这样覆盖init 方法:
-(id)init
if ((self = [super init]))
// My init code here
return self;
我现在期望 my 在实例化时被调用。然而,表格视图被显示,但该方法从未被调用。
我可以解决这个问题,但我想完全理解它,对我来说,不清楚在不调用 init
方法的情况下如何实现对象。
【问题讨论】:
如果您按照发布的方式从 nib 文件加载单元格,则不需要 'cell = [[StationAndTwoProgramsCell alloc] init]; ' 行 - 使用 alloc/init 单元创建的内容无论如何都会在下一行 'cell = ...' 中被覆盖,这也会导致内存泄漏。 【参考方案1】:当被取消归档时,初始化会经过稍微不同的路径。
将调用-(id)initWithCoder:(NSCoder*)aDecoder
而不是-(id)init
。此时插座未连接,如果您需要访问插座,您可以覆盖-(void)awakeFromNib
,它将在对象连接后调用。
【讨论】:
你是救生员!一直试图从自定义超类中找到一种“默认”我所有自定义单元格背景颜色的方法。效果很好!【参考方案2】:当从 nib 文件加载对象时,它的 -awakeFromNib 方法被调用 - 你可以把你的初始化代码放在那里:
- (void)awakeFromNib
// Init code
【讨论】:
以上是关于为啥不调用基于 nib 的自定义表格单元格的 init 方法的主要内容,如果未能解决你的问题,请参考以下文章
我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度