黑马程序员-----MVC和KVC

一、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: 对输入的键数组中的每一个键进行检索,返回包含了这些键对应的值的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值