使用Core Data transient属性作为缓存

时间:2013-01-25 17:28:08

标签: ios cocoa-touch caching core-data

我有一个核心数据模型,我希望使用UITableView来呈现。问题是每个UITableViewCell都有自己的自定义高度,计算它需要一些时间。因此,我想预先计算并缓存它们。

这是我的想法:

每个模型都有一个名为cache的瞬态属性。此属性将包含我自己的缓存对象(NSObject的自定义子类),可以懒惰地计算其数据。

以下是我的问题:

  • 使用transient属性存储我的cache对象是个好主意吗?或者将它们存储在NSDictionary中会更好吗?如果是这样,使用ObjectID作为密钥是否安全?
  • 应用程序启动后,我需要为所有cache个对象运行后台预先计算。使用NSFetchRequest访问所有对象(可能是几千个)并让他们的cache对象预先计算是不是一个好主意?

2 个答案:

答案 0 :(得分:1)

鲁道夫,

我在表格视图中使用的实体上使用简单的@property CGSize解决了这个问题。它会在请求行高(-tableView:heightForRowAtIndexPath:)时检查大小是否为零,如果是,则计算它,将其保存在ivar中并返回它。它非常简单,不需要是模型中的属性。如果此高度可能会发生变化,那么您需要跟踪这些条件并告知表格视图。因此,您可以吹掉缓存的值。

安德鲁

答案 1 :(得分:0)

您尝试缓存的属性似乎不是非常动态,因为您在应用程序启动时计算它。最好使它成为持久属性并在保存到数据库时计算值。如果由于某种原因,值更改,您可以重新计算该值。如果要在后台线程上保存实体上的所有新记录,则效果会更好。