ios - 没有为 UITableViewCell 对象调用 awakeFromNib

标签 ios xcode uikit xcode-storyboard awakefromnib

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

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

只是为了澄清当我在 cellForRowAtIndexPath 函数中初始化单元格时它被调用得很好,就在我试图在 View Controller viewWillAppear 方法中预加载它们时它坏了。

最佳答案

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

首先,当您说“预加载”时,您的确切意思是什么?您是否在 viewWillAppear 中调用了 dequeueReusableCellWithIdentifier?或者您正在调用 init。无论哪种方式,这都不是可接受的做法。

请记住,UITableViewCells 是“可重用的”,这意味着 UITableView 实际上会在 UITableViewCells 离开屏幕时处理它们的卸载和加载以优化性能(不管你信不信,这不是内存)以及其他一些东西。从本质上讲,这是保持表格 View 高效的非常巧妙的“技巧”。因此,如果您的 UITableView 太慢,那么您做错了什么,而不是 UITableView

的实现

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

其次,关于 awakeFromNib 没有被调用的问题。您没有提供足够的信息。你是如何初始化它的?如果您在 Storyboard / Nib 中创建它,则不应调用任何 init 方法。事实上,从 iOS6 开始,您可以从 dequeueReusableCellWithIdentifier 中获得一个非 nil 单元格。

关于ios - 没有为 UITableViewCell 对象调用 awakeFromNib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811815/

相关文章:

iphone - 为什么此 GLView 屏幕截图代码返回空白/黑色 UIImage?

c# - 如何在 MonoTouch 中代理 UIKit 委托(delegate)?

ios - 如何使用 Metal 在 iOS 上使用 GPU 和 CPU 之间的共享内存? (理想情况下 objective-c )

iphone - 如何将数据从详细 View Controller 传回 uitableview?

objective-c - 为什么我在 ios 中重新打开 session 后无法访问 facebook 好友列表

ios - 如何确保 xib 文件在所有设备上正确显示?

ios - swift 在 UIDocumentPicker 中设置文档扩展名

ios - 透明 View 是黑色的?

ios - 使用 watchOS 3 时出现 CloudKit 错误

ios - 'title' 的类型与协议(protocol) 'MKAnnotation' 要求的可选性不同