在实际开发过程中,我们经常要使用很多的模式代码。这些模式代码,就好像是下象棋中的固定套路一样,只要掌握好便一通百通。小生今天就写几个固定常用的模型层经典模式代码。
相信有过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虽然很多都是运行时候检测,牺牲了一定的效率,不过真的非常省内存,运行非常流畅啊~