NSUserDefaults standardUserDefaults
时间: 2023-08-24 09:42:46 浏览: 49
`NSUserDefaults` 是iOS中的一个轻量级的数据持久化工具,使用它可以方便地存储一些应用的配置信息、用户偏好等数据。`standardUserDefaults` 是 `NSUserDefaults` 的一个类方法,返回应用的默认持久化存储对象,可以在整个应用中访问。可以使用 `setObject:forKey:` 方法设置数据,使用 `objectForKey:` 方法获取数据。此外,还可以使用 `synchronize` 方法将数据立即写入持久化存储,避免数据丢失。
相关问题
objective-c 开发IOS 存储和获取全局数据
Objective-C开发iOS应用程序时,可以使用NSUserDefaults类来存储和获取全局数据。NSUserDefaults类是一个轻量级的持久化存储机制,可以用于存储应用程序的配置信息、用户偏好设置等全局数据。以下是一个示例代码:
// 存储数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"Hello World" forKey:@"myKey"];
[defaults synchronize];
// 获取数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *myValue = [defaults objectForKey:@"myKey"];
注意:存储的数据类型必须是NSString、NSNumber、NSData、NSArray、NSDictionary等基本数据类型,不能存储自定义的对象。
iOS 中将 接口返回数据 缓存到本地
在 iOS 中,你可以使用以下两种方式将接口返回的数据缓存到本地:
1. 使用 NSUserDefaults
如果你的数据量比较小,可以将接口返回的数据存储到 NSUserDefaults 中。NSUserDefaults 是一个轻量级的本地存储工具,可以用来存储简单的用户配置信息和小数据量的数据。
你可以将接口返回的数据转换成 NSData 类型,然后存储到 NSUserDefaults 中。示例代码如下:
```objective-c
// 将接口返回的数据转换成 NSData 类型
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:responseObject];
// 存储到 NSUserDefaults 中
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"cachedData"];
[defaults synchronize];
```
在读取数据时,你可以使用如下代码:
```objective-c
// 从 NSUserDefaults 中读取数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"cachedData"];
// 将 NSData 类型转换成 NSDictionary 类型
NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
```
2. 使用文件缓存
如果你的数据量比较大,可以将接口返回的数据存储到文件中。在读取数据时,你可以从文件中读取数据。示例代码如下:
```objective-c
// 将接口返回的数据转换成 NSData 类型
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:responseObject];
// 存储到文件中
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [cachePath stringByAppendingPathComponent:@"cachedData"];
BOOL success = [data writeToFile:filePath atomically:YES];
if (!success) {
NSLog(@"Error writing to file");
}
```
在读取数据时,你可以使用如下代码:
```objective-c
// 从文件中读取数据
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [cachePath stringByAppendingPathComponent:@"cachedData"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
// 将 NSData 类型转换成 NSDictionary 类型
NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
```
注意:无论你选择哪种方式,都需要注意缓存的有效期。在读取数据时,你需要判断缓存是否过期,如果过期了,就需要重新从接口获取数据。