iOS本地数据存储的方式

iOS本地数据存储有哪几种方式?

1.  复杂对象写入本地NSKeyedArchiver(归档)采用归档的形式来保存数据,该对象数据需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。

现在创建一个Boss类,并且.h遵守NSCoding协议,.m两个协议方法。


Boss.h文件

#import <Foundation/Foundation.h>

// NSCoding 协议 把一个类中的所有数据, 进行整体编码 方便进行文件读取

@interface Boss : NSObject <NSCoding>

@property (nonatomic, retain)NSString *name;

@property (nonatomic, retain)NSString *sex;

@property (nonatomic, retain)NSString *number;

@end



Boss.m文件

#import "Boss.h"

@implementation Boss

- (void)dealloc

{

    [_name release];

    [_sex release];

    [_number release];

    [super dealloc];

}



// 协议方法 编码方法

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    // 对每个属性标记, 用于在读取数据时进行恢复

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeObject:self.sex forKey:@"sex"];

    [aCoder encodeObject:self.number forKey:@"number"];

}

// 协议方法 解码方法

- (id)initWithCoder:(NSCoder *)aDecoder

{

    self = [super init];

    if (self) {

        // 每次都按照之前给定的key 给对应属性赋值

        self.name = [aDecoder decodeObjectForKey:@"name"];

        self.sex = [aDecoder decodeObjectForKey:@"sex"];

        self.number = [aDecoder decodeObjectForKey:@"number"];

    }

    return self;

}

@end


2.Write写入方式:永久保存在磁盘中

//沙盒的含义  在一定范围内可以做任何事情;

//iOS的沙盒指的就是应用程序的文件操作文件夹,在文件夹内可以读写任何内容,但是完全不能访问其他应用程序的沙盒文件夹;

//Document:用户相关的文件,用户数据,用户设置的对应用程序的偏好设置,用户的一些文本信息,最好不要存储占空间较大的文件比如视频音频


// Library : 给开发者使用的

// Caches :存储缓存文件, 用户看过的图片音频视频缓存 一般的app清除缓存就是清除这个文件夹中的内容

//preferen : 给开发者存储一些内容, NSUserDefaults 保存的信息都在这个文件中

    

// tmp : 临时文件夹, 存储网络请求过程中的临时文件. 在app版本更新时会直接清空tmp文件

//简单对象写入本地 NSString,NSArray  NSNumber  NSData  NSDictionary等;

//打印沙盒文件路径

NSLog(@"%@", NSHomeDirectory());

    // 1. 拼接一个存储路径

            // 系统提供了一个函数 直接返回某一个沙盒文件夹的路径

                // 返回值: 找到的路径组成的数组, 如果搜索的是系统的沙盒文件 那么数组中只有一个元素

                // 参数1:  搜索沙盒中的哪个文件夹

                // 参数2:  在什么范围内搜索

                // 参数3:  返回的是相对路径 or 绝对路径

    NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

            // 获取文件路径

                // 取出Document文件夹的路径

    NSString *docPath = [arr lastObject];

                // Document文件路径后 拼接一个文件路径

    NSString *textPath = [docPath stringByAppendingString:@"/123.text"];

    

        // 2. 按照路径写入

    

    NSString *str = @"张强去WC, 把网断了, 这是个秘密";

            // 系统提供了存储字符串的方法

                // 返回值: BOOL

                // 参数1:  要写入的路径

                // 参数2:  是否对写入的文件进行写保护

                // 参数3:  编码方式

                // 参数4:  错误信息

    NSError *error = nil;

    [str writeToFile:textPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

    

    

    // 读取信息

    NSString *readStr = [[NSString alloc] initWithContentsOfFile:textPath encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"%@", readStr);

    

    

    

    // 数组写入本地

    NSArray *array = [NSArray arrayWithObjects:@"111", @"222", @"333", @"444", nil];

    // 拼接路径

    NSString *arrPath = [docPath stringByAppendingPathComponent:@"arr.plist"];

    // 写入本地

    [array writeToFile:arrPath atomically:YES];

    NSArray *myArr = [[NSArray alloc] initWithContentsOfFile:arrPath];

    for (NSString *str in myArr) {

        NSLog(@"---------%@", str);

    }


3.NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。

4.SQlite(FMDB、CoreData)NSCoding + NSKeyedArchiver实现复杂对象存储




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值