4

我有一个继承自 的类UITableViewCell,它有一堆IBOutlets. 我以前一直在以重用单元格并根据需要对其进行初始化的方式使用此对象。这种方法太慢了,所以我决定创建一个UITableViewCell对象数组,然后根据需要在cellForRowAtIndexPath:方法中添加它们。

IBOutlet除对象外,所有内容都可以正常加载。awakeFromNib从未被调用,所以我认为这与我的问题有关。

只是为了澄清当我初始化函数中的单元格时它被调用得很好cellForRowAtIndexPath,只是当我试图在视图控制器viewWillAppear方法中预加载它们时它会中断。

4

2 回答 2

0

我知道这是一个老问题。但看完对话后,我觉得我必须提供一些意见。这是您在此处处理的一个多层次问题。

首先,当您说“预加载”时,您的确切意思是什么?你在打电话dequeueReusableCellWithIdentifierviewWillAppear?或者你打电话给init. 无论哪种方式,这都不是可接受的做法。

请记住,UITableViewCells 是“可重用的”,这意味着 UITableView 实际上会处理UITableViewCells它们在屏幕外时的卸载和加载,以优化性能(不是内存,信不信由你)以及其他一些事情。从本质上讲,保持表格视图高效是一个非常漂亮的“技巧”。所以如果你UITableView的速度太慢,那么你做错了什么,而不是执行UITableView

当您说您正在“预加载”它们时,会立即对您的使用提出一些危险信号。当您说“方法太慢”时,事实并非如此。UITableViews 和 UICollectionViews 的委托/数据源方法按计算顺序发生。不要与之抗争。

其次,对于您awakeFromNib没有被调用的问题。你没有提供足够的信息。你是怎么初始化的?如果您在情节提要/笔尖中创建它,则不应调用任何init方法。事实上,从 iOS6 开始,您可以保证从dequeueReusableCellWithIdentifier.

于 2014-08-22T19:42:39.933 回答
-1

你有没有通过它的超类调用它,比如:

-(void)awakeFromNib
{
    [super awakeFromNib]; // Use this line 
}

希望它可以帮助你。

于 2013-05-29T10:51:08.710 回答