ios 字典保存在list

懒加载一个路径,此plist保存在Documents下

#pragma mark - lazyload

- (NSString *)path{

if (!_path) {

//建立文件管理

//        NSFileManager *fm = [NSFileManager defaultManager];

//找到Documents文件所在的路径

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

//取得第一个Documents文件夹的路径

NSString *filePath = [pathArray firstObject];

//把NetworkInfoDic文件加入

_path = [filePath stringByAppendingPathComponent:@"NetworkInfoDic.plist"];

}

return _path;

}

懒加载字典

- (NSDictionary *)networkInfoDic

{

if (!_networkInfoDic) {    //第一次判断是否被加载过,如没有则初始化懒加载

_networkInfoDic = [NSMutableDictionary dictionaryWithContentsOfFile:self.path];

NSLog(@"%@", _networkInfoDic);

if (!_networkInfoDic) {          //字典从文件中加载失败,也就是第一次运行该段代码,不是程序第一次运行,没找到,则进行创建

//如果没有读取到数据,则从建文件并初始数据

NSFileManager *fm = [NSFileManager defaultManager];      //创建一个文件管理对象

[fm createFileAtPath:self.path contents:nil attributes:nil];    //进行创建

//网络初始数据

//此初始化数据字典的第一项是ip地址,第二项还是一个存有端口号的字典

NSDictionary *portDic = @{@"1":@"12345", @"2":@"12345", @"3":@"12345"};

NSDictionary *dic = @{@"host":@"192.168.0.1", @"port":portDic};

[dic writeToFile:self.path atomically:YES];      //写入文件

//重新从文件加载,如果此处还不放心,则可以再次判断,处理,由于本人在此处亲自初始化创建,肯定有文件,所以不再判断

_networkInfoDic = [NSMutableDictionary dictionaryWithContentsOfFile:self.path];

NSLog(@"%@", _networkInfoDic);

}

}

return _networkInfoDic;

}

当第二次运行上段代码时,第一从文件加载就可以成功,后面的将不再执行,初始数据创建代码只执行一次,不同于dispatch_once,dispatch_once是在整个程序中只运行一次,当然如果所有的东西清理掉,还是可以运行该段代码,(不包括clean),总之只要文件中找不到,它就会创建

ios 字典保存在list_第1张图片

你可能感兴趣的:(ios 字典保存在list)