【问题标题】:Use Core Data's transient property as cache使用 Core Data 瞬态属性作为缓存
【发布时间】:2013-01-09 17:36:05
【问题描述】:

我有一个 Core Data 模型,我想使用 UITableView 来展示它。问题是每个UITableViewCell 都有自己的自定义高度,计算它需要一些时间。因此,我想预先计算并缓存它们。

这是我的想法:

每个模型都有一个名为cache 的瞬态属性。该属性将包含我自己的缓存对象(NSObject 的自定义子类),它们能够延迟计算它们的数据。

这是我的问题:

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

【问题讨论】:

    标签: ios cocoa-touch caching core-data


    【解决方案1】:

    您尝试缓存的属性似乎不是很动态,因为您是在应用程序启动时计算它。您最好将其设为持久属性并在保存到数据库时计算值。如果由于某种原因值发生变化,您可以重新计算该值。如果您将实体上的所有新记录保存在后台线程上,这会更好。

    【讨论】:

      【解决方案2】:

      鲁道夫,

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

      安德鲁

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        相关资源
        最近更新 更多