iOS本地存储的方式

iOS本地存储的方式

1.NSUserDefaunts (Preference偏好设置)
2.plist存储
3.归档
4.SQLite3
5.CoreData**

应用沙盒
Document :适合存储重要的数据,iTunes同步应用时会同步该文件下的内容。(比如游戏中的存档)。
Library/Caches:适合存储体积大,不需要备份的非重要数据,iTunes不会同步该文件。
tmp:保存应用的临时文件,用完就删除,系统可能在应用没在运行时删除该目录下的文件,iTunes不会同步。

获取沙盒路径
Document:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentFilePath = paths.fistObject;

1.NSuserDefault
NSuserDefault 适合存储轻量级的本地数据,支持的数据类型:NSNumber,NSString,NSDate,NSArray,NSDictionary,BOOL,NSData
沙盒路径为Library/Preferences
文件格式为.plist

优点
1.不需要关心文件名;
2.快速进行键值对存储;
3.直接存储基本数据类型;

缺点
1.不能存储自定义数据
2.取出的数据是不可变的

-void)userDefaultSave{
   
NSArray *testArray = @[@"test1",@"test1",@"test3"];
[ [NSUserDefaults standardUserDefaults] setObject:testArray forKey:@"arraykey"];
[[NSUserDefaults standarUserDefaults] synchronize];
}
- (void)userDefaultLoad{
   
NSArray *testArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayKey"];
NSLog(@"%@",testArray);
}

封装调用

#pragma mark 保存本地数据
void saveUserInfo(NSString *keyName,id valueName)
{
   
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    [def setObject:valueName forKey:keyName];
    [def synchronize];
}
#pragma mark 获取本地数据
NSString *  getUserInfo(NSString *keyName)
{
   
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    return [def objectForKey:keyName];
}
#pragma mark 删除本地数据
void removeUserInfo(NSString *key)
{
   
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    [def removeObjectForKey:key];
    [def synchronize];
}

2.plist存储

plist支持的数据类型:NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSData,NSMutableData,NSString,NSMutableString,NsNumber,NSDate;
不支持BOOL,而且最外层好像要用NSArray或NSDictionary;

- (void)plistSave{
   
NSSring *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirecttory,NSUserDomainMask,YES).firstObject;
NSString *filePath = [cachPath stringByAppendingPathComponent:"testPlist.plist"];
NSMutableDitionary *dict = [NSMutableDictionary dictionary];
dict setObject:@"jack" forKey:@"name";
dict setObject:@"18" forKey:@"age";
[dict writeToFile:filepath atomically:YES];
}
- (void)plistLoad{
   
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSString *filePath = [cachePath stringByAppendingPathComponent:@"testPlist.plist"];

NSDictionary *t = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@",t);
}

3.归档
存储自定义对象

1.首先新建Person类,并遵守NSCoding协议
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Person : NSObject<NSCoding>

@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSString *age;

@end

NS_ASSUME_NONNULL_END

2.实现协议方法
#import "Person.h"

@implementation Person

- (instancetype)initWithCoder:(NSCoder *)coder
{
   
self = [super init];
if (self) {
   
_name = [coder decodeObjectForKey:@"name"];
_age = [coder decodeObjectForKey:@"age"];
}

return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
   
[coder encodeObject:self.name forKey:@"name"];
[coder encodeObject:self.age forKey:@"age"];
}


@end

3.归档解档

#pragma mark - 一个对象归档
- (void)archive{
   
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentFilePath = paths.firstObject;
NSString *filePath = [documentFilePath stringByAppendingPathComponent:@"personModel"];
Person *p1 = [[Person alloc]init];
p1.name = @"jack";
p1.age = @"18";
[NSKeyedArchiver archiveRootObject:p1 toFile:filePath];

}
#pragma mark - 一个对象解档
- (void)unarchive{
   
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentFilePath = paths.firstObject;
NSString *filePath = [documentFilePath stringByAppendingPathComponent:@"personModel"];
Person *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"%@",p1.name);
NSLog(@"%@",p1.age);
}

#pragma mark - 多个对象归档
- (void)archiveManyObject
{
   
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值