【问题标题】:Best way to store a large array of boolean variables?存储大量布尔变量的最佳方法?
【发布时间】:2010-10-10 01:58:12
【问题描述】:

我正在编写需要存储 60*4 布尔值的代码,这些值的标题存储在 plist 中。我需要在运行时操作布尔值并且找不到轻松更新 plist 文件的方法..也使用 sqlite 数据库存储布尔值对于如此大量的数据变得忙碌...有没有简单的方法通过我可以在运行时和应用程序启动后轻松存储和检索这些值?

【问题讨论】:

标签: ios objective-c xcode cocoa-touch


【解决方案1】:

你可以使用 NSData 方法来存储布尔数组,但你也可以让 cocoa 自然地做到这一点:

NSArray* arrayOfBools; // array of 240 NSNumbers, each made with [NSNumber numberWithBool:NO];

然后

[[NSUserDefaults standardUserDefaults] setObject:arrayOfBools forKey:@"MyNameForThe240"];

检索它们:

NSArray* savedBools = [[[NSUserDefaults standardUserDefaults] objectForKey:"MyNameForThe240"];

您可能希望将它们放在一个可变数组中:

NSMutableArray* the240ThatCanBeEdited = [NSMutableArray arrayWithArray:savedBools];

然后在退出时,用

保存它们
[[NSUserDefaults standardUserDefaults] setObject:the240ThatCanBeEdited forKey:@"MyNameForThe240"];

【讨论】:

    【解决方案2】:

    虽然如上所述使用 NSArray 或 NSMutableArray 会容易得多, 你可以看看使用标准的 C++ 向量类。 AFAIK 这是非常节省空间的 wrt。内存的分配。

    【讨论】:

      【解决方案3】:

      我并不是要成为异端,但对于这种情况有一个简单的规则:过早优化是万恶之源。

      60*4 只是 240 个布尔值。即使您设法以最糟糕的方式存储它们并且每个布尔值取 1k,那仍然只有 240k。只要那是存储而不是 RAM,谁在乎呢?为什么不从最简单的方法开始并在以后遇到问题时解决它? SQLite 非常适合这个。

      如果您即将发货并已将此问题确定为问题,请务必忽略此答案。 :)

      【讨论】:

      • 我必须同意。担心 240 个布尔值与担心 240000 个布尔值不同。您尝试打包它们,打包/解包代码将占用比布尔值本身更多的空间。
      • 实际上为了方便我们已经拿了 4 次,但它也可以达到 100...所以它将是 60*100 因此我正在寻找其他方式
      • 嗯,在一个带有索引且没有优化的 sqlite3 数据库中存储 100 组 60 个布尔值(总共 6000 个)需要 150k。如果集合的大小始终相同,您可以将它们作为 60 字节(+长度)的字符串存储在单独的记录中,但我认为单独存储它们是更好的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2021-09-27
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多