我有一个继承自UITableViewCell
的类,它有一堆IBOutlets
。我之前一直在使用这个对象,重用单元格并根据需要对其进行初始化。这个方法太慢了,所以我决定创建一个UITableViewCell
个对象的数组,然后根据需要在cellForRowAtIndexPath:
方法中添加它们。
除IBOutlet
个对象外,其他所有内容都可以正常加载。永远不会调用awakeFromNib
所以我认为这与我的问题有关。
只是为了澄清当我在cellForRowAtIndexPath
函数中初始化单元格时,它被称为正常,就在我尝试在它破坏的视图控制器viewWillAppear
方法中预加载它时。 p>
答案 0 :(得分:0)
我知道这是一个老问题。但在阅读完对话后,我觉得我必须提供一些意见。这是一个你在这里处理的多层次问题。
首先,当你说" preload"你究竟是什么意思。您是否在dequeueReusableCellWithIdentifier
中致电viewWillAppear
了?或者你打电话给init
。无论哪种方式,这都不是一种可接受的做法。
请记住,UITableViewCells是"可重复使用"这意味着UITableView实际上处理了UITableViewCells
在屏幕外时的卸载和加载,以优化性能(不是内存,信不信由你)以及其他一些东西。从本质上讲,它是一个非常漂亮的" hack"保持表视图有效。因此,如果您的UITableView
太慢,那么您做错了,而不是UITableView
的实施
当你说你是"预加载"它们会在你的使用上引发一些直接的危险信号。当你说'#34;方法太慢"时,它不是。 UITableViews和UICollectionViews的委托/数据源方法以计算的顺序发生。不要打它。
其次,对于awakeFromNib
没有被调用的问题。您没有提供足够的信息。你是如何初始化它的?如果您在storyboard / nib中创建了它,则不应该调用任何init
方法。实际上,从iOS6开始,您可以保证dequeueReusableCellWithIdentifier
的非零单元格。
答案 1 :(得分:-1)
你有没有通过它的超级类来调用它:
-(void)awakeFromNib
{
[super awakeFromNib]; // Use this line
}
希望它对你有所帮助。