iOS:编码/解码内存密集型对象的最佳方式

时间:2011-12-01 14:41:41

标签: objective-c ios cocoa-touch memory-management data-persistence

我对iOS编程很新,我很难决定使用NSCoding协议编码内存密集型对象的最佳方法。

我有大量的Item对象。每个项目都有许多与之相关的高分辨率图像。此外,每个Item都属于一个ItemCategory,它可能包含100个Items。

据我所知,我有几种不同的编码选项:

  1. 对整个ItemCategory对象进行编码
  2. 消除ItemCategory类,为每个Item创建一个itemCategory属性,然后只编码各个Item对象。
  3. 在我看来,#1会浪费很多钱。为了向ItemCategory添加一个新的Item,我必须解码整个ItemCategory(这意味着解码那些绑定到它包含的Items的数百个图像),添加Item,然后重新编码整个Item (再次,连同所有这些图像)。

    但是,从代码结构的角度来看,#1似乎是正确的方法。 #2迫使我想出一种不太直观的方式来存储项目并将它们与各自的ItemCategories相关联。

    如果我要使用#1,是否有办法只解码对象的某些部分,这样当我实际上不需要显示它们时,我最终没有得到所有这些图像的初始化?我想到的一个想法是,实际上不会将Item的UIImages与Item本身一起编码,而只是对图像名称进行编码。这样,图像只会在必要时被初始化,如果需要,可以在不释放整个项目的情况下释放。我想这是一种关系数据库类型的方法。

    我觉得必须有一种处理这种情况的标准方法,不是吗?

    或者我对记忆消耗的恐惧没有根据?也许这可以看作是“过早优化”的一个例子,但我现在做出的决定将深深影响应用程序的数据结构。在选择#1到#2的路上不会很漂亮:)

1 个答案:

答案 0 :(得分:0)

也许您可以使用CoreData和persistentStore。 CoreData可以轻松管理关系。您可以创建具有由系统管理的关系的实体。因此,在您的情况下,也许您可​​以拥有3个实体:类别,项目和图像,以及类别和项目之间的一对多关系,以及项目和图像之间的一对多关系,这意味着每个类别可以包含多个项目,每个项目都有多个图像,然后当您需要时,您可以创建新图像并将其添加到特定项目,或搜索项目中的所有图像。

我希望这很清楚,但CoreData非常适合管理关系,数据模型很容易使用。