在应用程序运行时方面,将数组元素放在UserDefaults的根目录上,而不是将它们放在容器密钥中?

时间:2017-04-27 10:41:44

标签: swift nsuserdefaults

我有一系列聊天线程,每个线程都有一些聊天消息。

Thread 1: "Hello world."
Participant: Alex, Billy, Cherry
Alex = "Hello"
Billy = "World"
Cherry = "Hahaha"

Thread 2: personal chat
Participants: Alex, Daniel
Alex = "Gday mate!"
Daniel = "Hey, how is it going?"
Alex = "Cool, lots of fun!"

我想将其保存在UserDefaults中。所有这些都将以字典和数组的形式保存。

现在想象这样的结构有数千个线程和数百万条消息。然后想象一下我必须把它保存在UserDefaults上。保存这些信息对我来说哪种方式更好?

方法1:将所有内容保存在一个密钥"threads"下。在这种方法中,每次添加/更改/删除一条消息或线程时,我都必须加载所有内容并保存所有内容。

{
    "threads": [
        {
            "id":90, "title":"Hello World", "participants":[7,12,54],
            "messages": [
                { "id":827, "sender":7, "text":"Hello" },
                { "id":828, "sender":12, "text":"World" },
                { "id":836, "sender":7, "text":"Hahaha" }
                ...
            ]
        }, 
        {
            "id":92, "title":"", "participants":[7,9],
            "messages": [
                { "id":850, "sender":7, "text":"Gday mate!" },
                { "id":855, "sender":12, "text":"Hey, how is it going?" },
                { "id":861, "sender":7, "text":"Cool, lot's of fun!" }
                ...
            ]
        }
        ...
    ]
}

方法2:将线程分解为元素,并在根上逐个保存。这样我一次只能操作一个键。仍然有原始的“线程”键,知道我有什么线程条目。但这意味着根级别上的密钥将是巨大的(每次我尝试访问UserDefaults时手机都需要加载所有根密钥?),而且我不仅要进行聊天才能保存。 / p>

{
    "threads": [ 90, 92, ... ],
    "thread-90": {
        "id":90, "title":"Hello World", "participants":[7,12,54],
        "messages": [
            { "id":827, "sender":7, "text":"Hello" },
            { "id":828, "sender":12, "text":"World" },
            { "id":836, "sender":7, "text":"Hahaha" }
            ...
        ]
    },
    "thread-92": {
        "id":92, "title":"", "participants":[7,9],
        "messages": [
            { "id":850, "sender":7, "text":"Gday mate!" },
            { "id":855, "sender":12, "text":"Hey, how is it going?" },
            { "id":861, "sender":7, "text":"Cool, lot's of fun!" }
            ...
        ]
    }
    ...
}

如果所有这些都经常访问,那么从访问速度,应用程序性能和CPU负载方面来看哪一个更好?如果它来自UserDefaults,我不知道加载时间有多重要。

0 个答案:

没有答案