我对 iOS 编程相当陌生,并且正在努力决定使用 NSCoding 协议对内存密集型对象进行编码的最佳方法是什么。
我有大量的 Item 对象。每个项目都有许多与之相关的高分辨率图像。此外,每个 Item 都属于一个 ItemCategory,其中可能包含 100 个 Item。
据我所知,我有几个不同的编码选项:
- 编码整个 ItemCategory 对象
- 消除 ItemCategory 类,只为每个 Item 创建一个 itemCategory 属性,然后对各个 Item 对象进行编码。
在我看来,#1会非常昂贵。为了向 ItemCategory 添加一个新项目,我必须解码整个 ItemCategory(这意味着也解码与它包含的项目相关的数百个图像),添加项目,然后重新编码整个事物(再次,连同所有这些图像)。
但是,从代码结构的角度来看,#1 似乎确实是正确的方法。#2 迫使我想出一种不太直观的方式来存储项目并将它们与各自的 ItemCategories 相关联。
如果我选择#1,有没有办法只解码对象的某些部分,这样当我实际上不需要显示它们时,我就不会初始化所有这些图像?我想到的一个想法是实际上不将 Item 的 UIImages 与 Item 本身一起编码,而只是图像名称。这样,图像只会在必要时被初始化,并且可以在需要时释放而不释放整个项目。我想这是一种关系数据库类型的方法。
我觉得必须有一个标准的方法来处理这种情况,不是吗?
或者我对内存消耗的恐惧是没有根据的?也许这可以看作是“过早优化”的一个例子,但我现在做出的决定将深深地影响应用程序的数据结构。从选项#1更改为#2在路上不会很漂亮:)