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



我对iOS编程相当陌生,正在努力决定使用NSCoding协议编码内存密集型对象的最佳方法。

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

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

  1. 编码整个ItemCategory对象
  2. 删除ItemCategory类,为每个Item创建一个ItemCategory属性,并且只编码单个Item对象。

在我看来,#1将是浪费的昂贵。为了将一个新的Item添加到ItemCategory,我必须解码整个ItemCategory(这意味着还要解码与它所包含的Items绑定的数百个图像),添加Item,然后重新编码整个东西(同样,连同所有这些图像)。

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

如果我用#1,有没有一种方法可以只解码对象的某些部分,这样我就不会在不需要显示它们时初始化所有这些图像?我想到的一个想法是不要将Item的UIImages与Item本身一起编码,而是只编码图像名称。这样,映像只会在必要时初始化,并且可以在不释放整个Item的情况下释放。我想这是一种关系数据库类型的方法。

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

或者我对内存消耗的恐惧是没有根据的?也许这可以看作是"过早优化"的一个例子,但是我现在所做的决定将深刻地影响应用程序的数据结构。如果从选项1改为选项2,那就不太好了

也许你可以使用CoreData和persistentStore。CoreData使管理关系变得容易。您可以创建具有由系统管理的关系的实体。所以在你的例子中,也许你可以有3个实体:类别、项目和图像,类别和项目之间是一对多的关系,项目和图像之间是一对多的关系,这意味着每个类别可以有多个项目,每个项目有多个图像,然后当你需要的时候,你可以创建新的图像并将它们添加到一个特定的项目,或者搜索一个项目中的所有图像。

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

最新更新