iOS开发持久化方案

 1 - (void)writeToFile {
 2     //plist文件只接受NSString、NSData、NSDate、NSNumber、NSArray、NSDictionary
 3     //自定义对象无法存入plist文件
 4     NSString *homeDir = NSHomeDirectory();
 5     NSString *documentsPath = [homeDir stringByAppendingPathComponent:@"Documents"];
 6     NSString *filePath = [documentsPath stringByAppendingPathComponent:@"first.plist"];
 7     NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObject:@"20200622" forKey:@"date"];
 8     NSArray *array = [NSArray arrayWithObjects:@"autoreleasepool",@"runtime",@"kvo",@"calayer", nil];
 9     [dic setObject:array forKey:@"oc_knowlangue"];
10     [dic writeToFile:filePath atomically:YES];
11 }
1 - (void)readPlistFile {
2     NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
3     NSString *filePath = [documentPath stringByAppendingPathComponent:@"first.plist"];
4     NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
5     NSLog(@"%@",dic);
6 }

1、plist文件的写入与读取

   2、用户偏好设置的写入与读取

1 - (void)writeToUserDefaults {
2      //写入到用户偏好设置
3        // 1.不需要关心文件夹和文件的名字
4        // 2.快速做键值对
5        // 3.用法和字典基本一样
6     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
7     [userDefaults setObject:@"20200622" forKey:@"date"];
8     [userDefaults synchronize];
9 }
1 - (void)readUserDefaults {
2     //NSUserDefaults是单例
3     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
4     NSString *date = [userDefaults objectForKey:@"date"];
5     NSLog(@"%@",date);
6 }

 3、归档与解档

 1 - (void)archiveObject {
 2         //归档 可将自定义对象进行持久化
 3         NSString *tmpPath = NSTemporaryDirectory();
 4         NSString *filePath = [tmpPath stringByAppendingPathComponent:@"liu.data"];
 5         Dog *dog = [[Dog alloc] init];
 6         dog.age = 18;
 7         dog.name1 = @"dog";
 8         dog.name2 = @"simon";
 9         [NSKeyedArchiver archiveRootObject:dog toFile:filePath];
10 }
1 - (void)unarchiveObject {
2     //解档
3     NSString *tempPath = NSTemporaryDirectory();
4     NSString *filePath1 = [tempPath stringByAppendingPathComponent:@"liu.data"];
5     Dog *d1 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath1];
6     NSLog(@"%@",d1);
7 }

    Dog类中需遵守NSCoding协议 实现- (instancetype)initWithCoder:(NSCoder *)coder 和- (void)encodeWithCoder:(NSCoder *)coder方法

 1 #import <Foundation/Foundation.h>
 2 
 3 NS_ASSUME_NONNULL_BEGIN
 4 
 5 @interface Dog : NSObject<NSCoding>
 6 @property (nonatomic, assign) int age;
 7 /*! name1 */
 8 @property (nonatomic, copy) NSString *name1;
 9 /*! name2  */
10 @property (nonatomic, copy) NSString *name2;
11 @end
12 
13 NS_ASSUME_NONNULL_END
 1 #import "Dog.h"
 2 
 3 @implementation Dog
 4 // !!!: 警告
 5 // ???: 疑问
 6 // TODO: 待编写
 7 // MARK: ~~~~~~~~
 8 // !!!: 警告
 9 // ???: 疑问
10 // TODO: 待编写
11 // MARK: ~~~~~~~~
12 // FIXME: 待修正
13 - (instancetype)init {
14     self = [super init];
15     if (self) {
16         self.name1 = @"name1";
17         self.name2 = @"name2";
18     }
19     return self;
20 }
21 
22 - (instancetype)initWithCoder:(NSCoder *)coder {
23     self = [super init];
24     if (self) {
25         _age = [coder decodeIntForKey:@"age"];
26         _name1 = [coder decodeObjectForKey:@"name1"];
27         _name2 = [coder decodeObjectForKey:@"name2"];
28     }
29     return self;
30 }
31 
32 - (void)encodeWithCoder:(NSCoder *)coder {
33     [coder encodeInt:_age forKey:@"age"];
34     [coder encodeObject:_name1 forKey:@"name1"];
35     [coder encodeObject:_name2 forKey:@"name2"];
36 }
37 
38 - (NSString *)description {
39     return [NSString stringWithFormat:@"age=%d name1=%@ name2=%@",_age,_name1,_name2];
40 }
41 
42 @end

 1、xml属性列表(plist)归档

2、Preference偏好设置

3、NSKeyedArchiver归档(NSCoding)

4、SQLite3

5、Core Data

沙盒目录

1、Documents 保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。

2、tmp :保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。

3、Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据

4、Library/Preference:保存应用的所有偏好设置,iOS的setting应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。

posted @ 2020-06-22 10:24  程序员小小刘  阅读(203)  评论(0)    收藏  举报