[ios] 模型层中的经典模式代码

   在实际开发过程中,我们经常要使用很多的模式代码。这些模式代码,就好像是下象棋中的固定套路一样,只要掌握好便一通百通。小生今天就写几个固定常用的模型层经典模式代码。

    相信有过mvc开发经验的朋友们对于模型层的理解并不陌生。将iOS资源文件中的plist文件转换成模型来使用,

字典转模型的好处:(1)降低代码的耦合度(2)所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率(3)在程序中直接使用模型的属性操作,提高编码效率 (4)调用方不用关心模型内部的任何处理细节

字典转模型的  注意点:

模型应该提供一个可以传入字典参数的构造方法

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)xxxWithDict:(NSDictionary *)dict;

 在模型中合理地使用只读属性,可以进一步降低代码的耦合度。

文中的-号方法是实例化方法,+号是工厂模式的方法。

上面的两个方法就是模型层代码定式了。另外,通常情况下我们还需要定义一个数组来返回每一个模型。这样方便我们其他函数的操作

+ (NSArray *)List;


下面把.m文件的内容进行补充,实现字典转模型的方法:

- (instancetype)initWithDict:(NSDictionary *)dict

{

   self = [superinit];

   if (self) {

       self.属性1 = dict[@"属性1"];

       self.属性1 = dict[@"属性1"];

    }

    return self;

}

+ (instancetype)xxxInfoWithDict:(NSDictionary *)dict

{

   return [[selfalloc]initWithDict:dict];

}


+ (NSArray *)List

{

    NSString *path = [[NSBundlemainBundle]pathForResource:@"xxx.plist"ofType:nil];

   NSArray *array = [NSArrayarrayWithContentsOfFile:path];

    

    NSMutableArray *arrayM = [NSMutableArrayarray];

   for (NSDictionary *dictin array) {

        [arrayMaddObject:[self xxxInfoWithDict:dict]];

    }

  return arrayM;

}



  补充说明

1.readonly属性

 (1)@property中readonly表示不允许修改对象的指针地址,但是可以修改对象的属性。

 (2)通常使用 @property关键字  定义属性时,会生成getter&setter方法,还会生成一个带下划线的成员变量。

 (3) 如果是readonly属性,只会生成getter方法,不会生成带下划线的成员变量.

通常情况下,对于readonly的属性,我们需要在@interface 和 @end 中自己定义一个带有下划线的属性名称。

2. instancetype类型 

(1)instancetype会让编译器检查实例化对象的准确类型   

 (2)instancetype只能用于返回类型,不能当做参数使用 

3.instancetype & id的比较

(1) instancetype在类型表示上,跟id一样,可以表示任何对象类型

(2) instancetype只能用在返回值类型上,不能像id一样用在参数类型上

(3) instancetype比id多一个好处:编译器会检测instancetype的真实类型

iOS虽然很多都是运行时候检测,牺牲了一定的效率,不过真的非常省内存,运行非常流畅啊~









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值