Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 存储大量布尔变量的最佳方法?_Ios_Objective C_Xcode_Cocoa Touch - Fatal编程技术网

Ios 存储大量布尔变量的最佳方法?

Ios 存储大量布尔变量的最佳方法?,ios,objective-c,xcode,cocoa-touch,Ios,Objective C,Xcode,Cocoa Touch,我正在编写一个需要存储60*4布尔值的代码,这些值的标题存储在plist中。我需要在运行时操作布尔值,但找不到一种方法来轻松更新plist文件。此外,使用sqlite数据库存储布尔值对于如此大量的数据来说变得非常繁忙…有没有简单的方法可以让我在运行时和应用程序之后轻松地存储和检索这些值开始?我并不想成为一个异端,但对于这样的情况有一个简单的规则:过早优化是万恶之源 60*4只代表240个布尔人。即使您设法以最糟糕的方式存储它们,并且每个布尔值取1k,这仍然只有240k。只要那是存储而不是RAM,

我正在编写一个需要存储60*4布尔值的代码,这些值的标题存储在plist中。我需要在运行时操作布尔值,但找不到一种方法来轻松更新plist文件。此外,使用sqlite数据库存储布尔值对于如此大量的数据来说变得非常繁忙…有没有简单的方法可以让我在运行时和应用程序之后轻松地存储和检索这些值开始?

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

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


如果您已接近发货,并已确定这是一个问题,请务必忽略此答案。:)

您可以使用存储布尔数组的NSData方法,但也可以让cocoa自然完成:

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

检索它们:

NSArray* savedBools = [[[NSUserDefaults standardUserDefaults] objectForKey:"MyNameForThe240"];
您可能希望它们位于可变数组中:

NSMutableArray* the240ThatCanBeEdited = [NSMutableArray arrayWithArray:savedBools];
然后在退出时,用

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

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

我不得不同意。担心240个布尔人和担心24万个布尔人是两码事。你试着打包,打包/解包代码会比布尔代码本身占用更多的空间。实际上为了方便起见,我们已经使用了4次,但它也可以达到100…因此它将是60*100,因此我正在寻找其他的wayWell,存储100组60个布尔代码(总共6000个)在具有索引且无优化的sqlite3数据库中,需要150k。如果集合的大小总是相同的,您可以将它们存储为单个记录中60字节(+长度)的字符串,但我认为单独存储它们是更好的方法
[[NSUserDefaults standardUserDefaults] setObject:the240ThatCanBeEdited forKey:@"MyNameForThe240"];