视频为:传智播客2014年第四期3-6月份(MJ老师的视频) – 第三天(应用管理小项目)课程
使用字典的坏处
- 一般情况下,设置数据和取出数据都是用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲;
- 手敲字符串key,key容易写错
- Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
使用模型的好处
- 所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业
- 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
- 适用模型访问属性时,编译器会提供一系列的提示,提高编码效率
app.name = @"Jack";
NSString *name = app.name;
转换的代码
1.在ViewController中
@interface MJViewController ()
/** 存放应用信息 */
@property (nonatomic, strong) NSArray *apps;
@end
@implementation MJViewController
- (void)viewDidLoad
{
[super viewDidLoad];
MJApp *app = self.apps[0];
NSString *appIcon = apps.icon;//获取app图片文件名称
NSString *appName = apps.name;//获取app名称
}
@end
/** 重写get方法(延迟加载) */
- (NSArray *)apps
{
//判断是否为空,如果为空则初始化加载plist文件内容
if (_apps == nil) {
// 1.获得plist的全路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
// 2.加载数组
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
// 3.将dictArray里面的所有字典转成模型对象,放到新的数组中
NSMutableArray *appArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray) {
// 3.1.创建模型对象
MJApp *app = [MJApp appWithDict:dict];
// 3.2.添加模型对象到数组中
[appArray addObject:app];
}
// 4.赋值
_apps = appArray;
}
return _apps;
}
2.MJApp.h文件
@interface MJApp : NSObject
/**
* 名称
*/
@property (nonatomic,copy) NSString *name;
/**
* 图标
*/
@property (nonatomic,copy) NSString *icon;
/**
* 通过字典来初始化模型对象
*
* @param dict 字典对象
*
* @return 已经初始化完毕的模型对象
*/
-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)appWithDict:(NSDictionary *)dict;
@end
3.MJApp.m文件
@implementation MJApp
-(instancetype)initWithDict:(NSDictionary *)dict{
if(self = [super init]){
self.name = dict[@"name"];
self.icon = dict[@"icon"];
}
return self;
}
+(instancetype)appWithDict:(NSDictionary *)dict{
//使用self的好处: 直接创建调用该方法的对象,例如子类对象,直接创建调用的子类对象
return [[self alloc] initWithDict:dict];
}
@end