7

过去几天我一直在试图解开一个谜,为什么我的批量大小为 20 的 NSFetchedResultsController 在提取完成后总是会立即出现故障(即加载到内存中)我的所有对象,导致请求大约需要 20 秒。

事实证明,这是因为在我的 heightForRowAtIndexPath 中,高度是基于每个获取的对象的 NSString 属性的长度,因此在重新加载表格时,如果表格有 2000 行,则计算中每一行的高度一开始,由于我访问对象的文本属性,它会在一开始就出现 2000 个对象(以 20 个大小的批次),导致它永远存在。(我不知道一开始就计算了行高)。

所以问题是,如果我有一个批量大小为 20 的 fetch results 控制器,但我的行高是基于对象的文本属性,如果我尝试访问会导致对象不再是错误但是实际加载到内存中,计算高度的解决方法是什么?

我有哪些选择?

4

2 回答 2

2

有趣的问题。为了提高性能,我会在模型中创建一个属性来存储该字符串文本的长度。通过这种方式,您无需即时计算每一行的长度,但您有一个预先计算的高度。

Myabe 可能还有其他有价值的解决方案。

于 2012-06-23T15:47:51.660 回答
-1

在您的视图控制器类中创建一个负责计算所述高度的静态方法。你只需要提供这个函数就是一个 NSString,它应该返回一个容易计算的 CGFloat。使用此方法返回元素所需的高度而不实例化它们(这里只需要它们文本的元数据)。

于 2012-06-23T15:44:17.947 回答