一、MVC
1、控制器读取资源(Controller)
1>在Controller中声明一个属性,并在该属性的getter方法中,对数据资源进行懒加载(在需要数据的时候才在getter方法中进行加载,就是懒加载)
2>在模型的构造方法中接收数据,建议使用KVC简化构造方法
2、数据模型(Model)
1>数据模型简称模型,是一个专门用于存放数据的OC对象(当然也可以是其他语言环境的对象) ,用模型来存放数据回更加专业;
2>模型是一个继承子NSObject的普通OC,模型是有字典转过来的,模型类的属性命名是与字典的key相同的
3>模型一般提供两个构造方法一个-方法和一个+方法,用于快速构造构造一个模型(类),建议在构造方法中使用KVC简化构造方法
4>模型的使用使对字典的访问变成对对象属性的访问,着就避免了再反复使用数据的过程当中可能出错的key值拼写,因为对象的属性访问,编译器是可以给出提示,可以提高编码效率,并且不易出错
5>小模型使用
a.创建模型类,组合数据当中会用到的所有信息,为模型类的属性
b.添加构造方法和快速构造器
c.在构造方法中直接使用KVC完成属性转换。
eg:
@implementation DHApp
- (instancetype)initWithDict:(NSDictionary *)dict
{
if (self = [superinit]) {
[selfsetValuesForKeysWithDictionary:dict];
}
return self;
}
+ (instancetype)appWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end
6>大模型使用
a.与创建小模型一样,创建一个模型类,(不用刻意去添加模型数组,通常该类会包含一个数组属性,用于存放小模型)
b.添加构造方法和快速构造器(加号方法)
c.跟小模型转化一样,在构造方法中直接使用KVC,然后在遍历数组属性(此时的数组是字典数组,需要转换成模型数组),将字典转成小模型
3、利用xib文件自定义view封装(View)
xib文件是可以用来描述某一块局部的UI界面的
1>xib文件的加载使用
a.NSArray *objs = [[NSBundle mainBundl] loadNibNamed:@"文件名" owner:nil options:nil];
b.UINib *nib = [UINib nibWithNibName:@"文件名" bundle:[NSBundle mainBundle]];
NSArray *objs = [nib instantiateWithOwner:nil options:nil];
2>xib文件的自定义封装view
a.新建xib文件AppView.xib(user interface -> empty),拖一个UIView到xib文件,在UIView当中做好布局
b.新建一个继承自UIView的类,类名与xib文件名相同AppView,类当中定义一个属性app,用于接收模型数据
c.修改xib文件里面的UIView的类型为AppView
d.将xib文件的子控件跟AppView类进行连线
e.重写AppView类的app属性的setter方法
f.在setter方法当中分析数据模型,拆分给我们自定的view的各个子控件(注意setter方法的重写不要忘记本身的setter方法的赋值操作,我们只是借用setter方法,要保证setter方法的原有方法可用)
二、KVC
1、KVC可以自动识别类型,无需手动转换
2、KVC一般使用
目前对KVC 的理解就是一系列的set方法eg:[self setValuesForKeysWithDictionary:dict];
会根据路径跟进,遍历字典的key将对应的value值赋给对象的key(同名)属性,而且只要字典当中有的key必须在对象中有对应(同名)的key属性才可以使用KVC否则发出valueForUndefinedKey: 消息
3、KCV的逆向使用
1>valueForKeyPath: 与之类似,返回特定键路径在对应接收对象中的值。当键路径的键序列中有任何一个键无法对应兼容KVC的对象,则接收对象都会发出valueForUndefinedKey: 消息。
2>dictionaryWithValuesForKeys: 对输入的键数组中的每一个键进行检索,返回包含了这些键对应的值的