iOS应用数据存储的常用方式
1、preference偏好设置 2、XML属性列表归档(plist) 3、使用Keychain 存储,例如存储UUID来解决设备唯一标识符获取方案 4、NSKeyedArchiver归档(NSCoding) 5、SQLite3 6、Core Data 7、第三方库:BGFMDB的使用
原文地址
https://kunnan.blog.csdn.net/article/details/74058857
每个iOS应用都有自己的应用沙盒,来与其他文件系统隔离。
1、应用程序包
(上图中的Layer)包含了所有的资源文件和可执行文件
2、Documents
保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
3、tmp:
保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
4、Library/Caches:
保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
5 Library/Preference:
保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
tmp:
FOUNDATION_EXPORT NSString *NSTemporaryDirectory(void);
沙盒根目录:
FOUNDATION_EXPORT NSString *NSHomeDirectory(void);
NSLog(@"%@",NSHomeDirectory());//: /Users/devzkn/Library/Developer/CoreSimulator/Devices/5A6E02FF-A156-455B-AE43-C207F4E7FBC4/data/Containers/Data/Application/E3F77B8B-C88C-4577-A943-187151AB19CC
Documents:(2种方式)
方式1:
```objectivec
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
// 不建议采用,因为新版本的操作系统可能会修改目录名
方式2:
//FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
// NSUserDomainMask 代表从用户文件夹下找
// YES 代表展开路径中的波浪字符“~”
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, NO);~/Documents/data.plist,yes的话,就展开全路径
// 在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素
NSString *documents = [array objectAtIndex:0];
Library/Caches (类似Documents)
Library/Preference
通过NSUserDefaults类存取该目录下的设置信息
针对应用的字体大小、是否保存用户名等偏好设置,IOS的每个应用都有个NSUserDefaults实例,通过它来存取偏好设置。NSUserDefaults设置数据的时候,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。
出现以上问题,可以通过调用
synchornize
方法强制写入
- (BOOL)synchronize;
偏好设置的好处
1、不用关心文件名 2、快速的进行键值对存储
+ (void)setObject:(id)value forKey:(NSString *)key{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+ (id)objectForKey:(NSString *)key{
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
-(void)setBShowIntroduce:(BOOL)bShowIntroduce
{
// [SessionMgr Instance].strOrderAmount = bShowIntroduce;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:bShowIntroduce] forKey:@"bShowIntroduce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
/**
此版本是否提示过文案
*/
-(BOOL)bShowIntroduce
{
// return [SessionMgr Instance].strOrderAmount;
NSNumber *numShowIntroduce = [[NSUserDefaults standardUserDefaults] objectForKey: @"bShowIntroduce"];
return [numShowIntroduce boolValue];
}
自定义的类型需要转成NSData再存
setObject
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:ModelKey];
unarchiveObjectWithData
NSData *data = [[NSUserDefaults standardUserDefaults] forKey:ModelKey];
[Session shareSession].model= [NSKeyedUnarchiver unarchiveObjectWithData:data];
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/z929118967/article/details/77387782
Keychain是OS X和iOS都提供的一种安全存储敏感信息工具。
比如,我们可以在Keychain中存储用户名、密码等信息。
Keychain的安全机制从系统层面保证了存储的敏感信息不会被非法读取或者窃取。
Keychain的特点如下:
1、保存在Keychain中的数据,即使应用程序被卸载,数据仍然存在;重新安装应用程序,我们也可以从Keychain中读取这些数据。 2、Keychain中的数据可以通过Group的方式实现应用程序之间共享,只要应用程序具有相同的TeamID即可。 3、保存在Keychain中的数据都是经过加密的,因此非常安全。
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/z929118967/article/details/115860229