【问题标题】:Where to store local variables? NSKeyedArchiver or NSUserDefaults?在哪里存储局部变量? NSKeyedArchiver 还是 NSUserDefaults?
【发布时间】:2014-12-25 06:27:25
【问题描述】:

这里有点菜鸟,但为应用程序保存简单变量/数组的最佳方法是什么?例如,我有一个应用程序,它有一个friendList 数组,我希望每次应用程序启动时都加载它?会是 NSKeyedArchiver 吗? NSUserDefualts?还是其他方式?另一个例子是说我有一个简单的 int 变量 postCount 来跟踪帖子的数量,这需要在退出时保存并加载。最好的方法是什么?谢谢!

【问题讨论】:

    标签: ios xcode nsuserdefaults nskeyedarchiver


    【解决方案1】:

    NSUserDefaults 最适合少量数据。 如果数据很小,更好的选择是NSUserDefaults,否则使用NSKeyedArchiver

    在您的情况下,friendList 数组可以包含大量数据,因此我更喜欢 NSKeyedArchiver。要存储 postCount,您可以使用 NSUserDefaults。

    【讨论】:

    • 感谢您的回答。正是我想要的。圣诞快乐!
    【解决方案2】:

    NSUserDefaults 类提供方便的方法来访问常见类型,例如 floatsdoublesintegersBooleans em> 和 网址。默认对象必须是一个属性列表,即:NSDataNSStringNSNumberNSDate、@ 987654326@,或NSDictionary。如果要存储任何其他类型的对象,通常应该将其归档以创建NSData 的实例。 归档和序列化是创建分层数据的体系结构独立字节流的两种方式。然后可以将字节流写入文件或传输到另一个进程,可能是通过网络。当字节流被解码时,层次结构被重新生成。档案提供了一系列相互关联的对象和价值的详细记录。序列化只记录属性列表值的简单层次结构。

    您可以使用NSUserDefault 存储NSArray,但更好的方法是 您应该使用NSKeyedArchiver 之类的东西将数组序列化为NSData,将其保存到NSUserDefaults,然后稍后使用NSKeyedUnarchiver 对其进行反序列化:

    NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
    [[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];
    
    //...
    
    NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
    NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];
    

    【讨论】:

    • 好的,非常感谢,只是想检查一下常见的编程实践在哪里存储这样的简单程序数据。谢谢您的回答。圣诞快乐!
    • @Kex 圣诞快乐!
    【解决方案3】:

    与应用程序设置相关的少量数据很容易保存在 UserDefaults 中。但是不要把用户名和密码放在那里——这就是钥匙串的用途。

    如果您只想存储数组和字典,那么使用 NSKeyedArchiver 进行序列化是一个合理的解决方案。

    但是,这是一种工程权衡,如果您有大量数据或可能更改的数据结构,那么使用适当的持久性机制是一个更好的主意。

    适当的持久性机制,例如 CoreData、Realm.io、Mantle,可以让您更好地控制模型对象的内存使用,更好地进行缩放,并且当您的模型对象发生变化时,可以支持适当的迁移。

    这实际上取决于您要节省什么、如何使用以及该用途可能会如何发展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2011-09-05
      • 2021-10-18
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多