gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:59:40 25 4
gpt4 key购买 nike

我对 iOS 编程相当陌生,并且正在努力决定使用 NSCoding 协议(protocol)对内存密集型对象进行编码的最佳方法是什么。

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

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

  • 对整个 ItemCategory 对象进行编码
  • 消除 ItemCategory 类,只为每个 Item 创建一个 itemCategory 属性,然后对各个 Item 对象进行编码。

  • 在我看来,#1会非常昂贵。为了向 ItemCategory 添加新项目,我必须解码整个 ItemCategory(这意味着还要解码与其包含的项目相关的数百张图像),添加项目,然后重新编码整个事物(再次,连同所有这些图像)。

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

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

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

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

    最佳答案

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

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

    关于objective-c - iOS:编码/解码内存密集型对象的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343103/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com