字典转换模型和懒加载以及内存管理
2016-12-15 00:00
246 查看
OC是一门弱语言,是基于运行时的语言
当从Root为array类型(数组里面放置的是字典)的plist文件中读取数据时
比如获取图片的个数/前缀
NSString *imageStrPre = dict[@"icon"];
int count = [dict[@"count"] intValue];
NSString *titleString = dict[@"desc"];
当@""里面写的内容与实际内容不符的时候,写的时候,Xcode不会自行提示,静态编译的时候也不会报错,当运行的时候,才会知道你有错误,当你写了很多的内容的时候,你很难发现哪里出现错误.所以,我们可以根据Xcode中一个强大的功能--自动提示,在我们编写代码的时候就知道哪里错误.
所以我们需要新建一个类,继承自NSObject,我们可以把我们数组中的字典来转换成一个对象
设置对象的属性与字典中的key值一一对应,这样我们在读取字典中的数据的时候就可以用实例化的对象的属性来取值,这样Xcode就会自动提示对象的属性来进行取值.
#import <Foundation/Foundation.h>
@interface HMAnimationModel : NSObject
@property (nonatomic,copy)NSString *icon;
@property (nonatomic,copy)NSString *desc;
@property(nonatomic,assign)int count;
//字典转换模型方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)animationModelWithDict:(NSDictionary *)dict;
@end
关于懒加载:
我们在开发APP时,会尽量的节省我们的内存,所以我们在读取数据的时候,会根据路径来读取,而不是采用缓存的方式来读取数据.
而为了节省时间,我们在用到数据的时候才回去读取数据,而且加载数据之后,以后再用到这个数据的时候就不需要再次加载.
这种情况就叫做懒加载
懒加载通常是重写get方法来实现的
//懒加载方法
- (NSArray *)dataArray{
if(nil==_dataArray){
//创建可变数组
NSMutableArray *arr=[NSMutableArray array];
//获取文件路径
NSString *filePath=[[NSBundle mainBundle] pathForResource:@"Images.plist" ofType:nil];
//通过文件路径把文件存储到数组中
NSArray *temp=[NSArray arrayWithContentsOfFile:filePath];
//数组中存放的都是字典 通过字典转化为模型
//遍历数组,转化为模型
for (NSDictionary *dict in temp) {
//实例化模型
HMAnimationModel *model=[HMAnimationModel animationModelWithDict:dict];
//把模型存放到数组中
[arr addObject:model];
}
//赋值
_dataArray=arr;
}
return _dataArray;
}
当我们用到数据的时候,通过点语法来调用我们重写的get方法来读取数据,当我们第二次调用点语法的时候,内部会判断你是否读取过数据,如果读取过就不会再次读取.这样就大大节省了运行时间 .
而且我们在开发APP的时候,要有始有终,在一个对象不用的时候,要及时释放,以便节省内存,比如动画播放完毕之后
//动画执行完之后释放内存
[_imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:count*0.1];
当从Root为array类型(数组里面放置的是字典)的plist文件中读取数据时
比如获取图片的个数/前缀
NSString *imageStrPre = dict[@"icon"];
int count = [dict[@"count"] intValue];
NSString *titleString = dict[@"desc"];
当@""里面写的内容与实际内容不符的时候,写的时候,Xcode不会自行提示,静态编译的时候也不会报错,当运行的时候,才会知道你有错误,当你写了很多的内容的时候,你很难发现哪里出现错误.所以,我们可以根据Xcode中一个强大的功能--自动提示,在我们编写代码的时候就知道哪里错误.
所以我们需要新建一个类,继承自NSObject,我们可以把我们数组中的字典来转换成一个对象
设置对象的属性与字典中的key值一一对应,这样我们在读取字典中的数据的时候就可以用实例化的对象的属性来取值,这样Xcode就会自动提示对象的属性来进行取值.
#import <Foundation/Foundation.h>
@interface HMAnimationModel : NSObject
@property (nonatomic,copy)NSString *icon;
@property (nonatomic,copy)NSString *desc;
@property(nonatomic,assign)int count;
//字典转换模型方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)animationModelWithDict:(NSDictionary *)dict;
@end
关于懒加载:
我们在开发APP时,会尽量的节省我们的内存,所以我们在读取数据的时候,会根据路径来读取,而不是采用缓存的方式来读取数据.
而为了节省时间,我们在用到数据的时候才回去读取数据,而且加载数据之后,以后再用到这个数据的时候就不需要再次加载.
这种情况就叫做懒加载
懒加载通常是重写get方法来实现的
//懒加载方法
- (NSArray *)dataArray{
if(nil==_dataArray){
//创建可变数组
NSMutableArray *arr=[NSMutableArray array];
//获取文件路径
NSString *filePath=[[NSBundle mainBundle] pathForResource:@"Images.plist" ofType:nil];
//通过文件路径把文件存储到数组中
NSArray *temp=[NSArray arrayWithContentsOfFile:filePath];
//数组中存放的都是字典 通过字典转化为模型
//遍历数组,转化为模型
for (NSDictionary *dict in temp) {
//实例化模型
HMAnimationModel *model=[HMAnimationModel animationModelWithDict:dict];
//把模型存放到数组中
[arr addObject:model];
}
//赋值
_dataArray=arr;
}
return _dataArray;
}
当我们用到数据的时候,通过点语法来调用我们重写的get方法来读取数据,当我们第二次调用点语法的时候,内部会判断你是否读取过数据,如果读取过就不会再次读取.这样就大大节省了运行时间 .
而且我们在开发APP的时候,要有始有终,在一个对象不用的时候,要及时释放,以便节省内存,比如动画播放完毕之后
//动画执行完之后释放内存
[_imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:count*0.1];
相关文章推荐
- 页面缓存:内存和文件之间的那些事
- Lua的内存管理浅析
- 跟我学习JScript的Bug与内存管理
- 解析javascript图片懒加载与预加载的分析总结
- javascript瀑布流式图片懒加载实例
- 跟我学习javascript的垃圾回收机制与内存管理
- 深入探讨PHP中的内存管理问题
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript瀑布流式图片懒加载实例解析与优化
- JavaScript实现图片懒加载(Lazyload)
- javascript内存管理详细解析
- JavaScript内存管理介绍
- Android开发技巧之Fragment的懒加载
- Angular懒加载机制刷新后无法回退的快速解决方法
- Cocos2d-x的内存管理总结
- 模拟实现C语言中的内存管理
- Javascript实现图片懒加载插件的方法
- 浅谈angular懒加载的一些坑
- javascript错误的认识不用关心内存管理