懒加载一个路径,此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),总之只要文件中找不到,它就会创建