1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据
包括:NSString, NSNumber, NSDate, NSArray, NSDictionary
2.数据存放于一个plist文件中。这个文件位于在 app同级目录的/Library/Preferences目录下
3.NSUserDefaults主要是 setObject 和 object ForKey,大数据使用其他的存储,如Sqlite3,CoreDate等;
4.使用偏好设置对数据进行保存之后, 它保存到系统的时间是不确定的,会在将来某一时间点自动将数据保存到Preferences文件夹下面,如果需要即刻将数据存储,可以使用[defaults synchronize];
1.偏好设置的plist文件存放地址
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"%@", path);
2.读存入NSString(NSNumber,NSDate)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // 写入数据 [defaults setObject:@"testString" forKey:@"test1"]; // 立即写入 [defaults synchronize]; // 读取数据 NSString *str = [defaults objectForKey:@"test1"]; NSLog(@"---%@",str);
3.读存入NSArray,NSDictionary
NSArray,NSDictionary为不可变类型,也是类似的。
但是,如果存入的是NSMutableArray,NSMutableDictionary,读出来的数组是不可变的类型为:NSCFArray。需要进行转变为NSMutableArray.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *array = [NSMutableArray arrayWithObjects:@"test1", @"test2", @"test3", nil]; [array addObject:@"test4"]; // 写入数据 [defaults setObject:array forKey:@"test2"]; // 立即写入 [defaults synchronize]; // 读取数据 // reason: ‘-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object‘ 这样直接等于的话mutableArray的类型为NSCFArray,不能继续往数组里面添加 // NSMutableArray *mutableArray = [defaults objectForKey:@"test2"]; NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"test2"]]; [mutableArray addObject:@"test5"]; NSLog(@"%@",mutableArray);
时间: 2024-12-28 21:12:41