懒加载的由来:不希望每次去调用数据
数据通常是保存在一个可变数组中的
所以通过重写这个成员属性的getter方法
懒加载的写法流程:
1、判断对象是否为nil
2、如果是nil,就加载数据
3、返回数据
注意点:在懒加载中不能使用 self.成员属性名,而是通过 _成员属性名 来拿到对象,这样做的原因是:
- (NSArray *)heroArray{
if (_heroArray == nil) {
_heroArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"heros" ofType:@"plist"]];
//1. 定义可变数组
NSMutableArray *nmArray = [NSMutableArray array];
//2. 遍历字典数组
for (NSDictionary *dict in _heroArray) {
//3. 字典转模型
HMHero *hero = [HMHero heroWithDict:dict];
//4. 将模型添加到可变数组中
[nmArray addObject:hero];
}
//5. 将模型的可变数组赋值给字典数组
_heroArray = nmArray;
}
return _heroArray;
}
_heroArray是直接值访问,而self.heroArray是属性访问,就是通过get/set方法来读取这个值,xcode会默认将两个值通过syncthesize关键字进行同步
所以等于在重写的get方法中调用了这个方法本身
Plist文件:
如果不需要增减代码,这时候通常会使用一个plist文件来代替代码写的数据,注意plist文件中根目录可以是一个数组,也可以是一个字典,它的作用是保存内存中数据存放的路径
通过路径加载文件的方法
NSBundle *bundle = [NSBundle mainBundle]; //这里写完仅仅获取的是手机中的主路径
NSString *path = [bundle pathForResource:@"messageList" ofType:@"plist"]; //仍需要通过这个方法获取需要的数据文件的全路径
网友评论