字典转模型方式实现九宫格

1.从plist文件加载数据

2.获取plist文件,转为数组

@property (nonatomic , strong) NSArray *appList;

// 懒加载属性

-(NSArray *)appList

{

// 将字典转为模型

if(_appList == nil){

//        _appList = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil]];

NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil]];

// 创建临时数组

NSMutableArray *arrayM = [NSMutableArray array];

for(NSDictionary *dict in array){

hdAppInfo *appInfo = [hdAppInfo appInfoWithDict:dict];

[arrayM addObject:appInfo];

}

// 将临时数组为属性赋值

_appList = arrayM;

}

return _appList;

}

3.字典转模型的好处:

(1)降低代码的耦合度

(2)所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率

(3)在程序中直接使用模型的属性操作,提高编码效率

(4)调用方不用关心模型内部的任何处理细节

4.字典转模型的注意点:

4.1声明属性 :

@property (nonatomic , copy)NSString *name;

@property (nonatomic , copy)NSString *icon;

// 4.2 instancetype 主要用于在类方法实例化对象,让编译器主动推断对象的实际类型

/** 通常在写模型的实例化方法时,以下两个方法,都需要实现 */

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

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

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

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

4.3构造方法实现

/** 使用字典实例化模型 */

-(instancetype) initWithDict:(NSDictionary *)dict

{

// self是对象

self = [super init];

if (self) {

// 用字典给属性赋值,所有与plist键值有关的方法,均在此处!

self.name = dict[@"name"];

self.icon = dict[@"icon"];

}

return self;

}

// 类方法可以快速实例化一个对象

+(instancetype) appInfoWithDict:(NSDictionary *)dict

{

// self是 class

return [[self alloc]initWithDict:dict];

}

5.补充说明

5.1.readonly属性

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

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

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

5.2.instancetype类型

(1)instancetype会让编译器检查实例化对象的准确类型 
(2)instancetype只能用于返回类型,不能当做参数使用

5.3.instancetype & id的比较

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

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

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

时间: 2024-11-09 00:46:36

字典转模型方式实现九宫格的相关文章

IOS 开发学习笔记-基础 UI(10)九宫格布局,块动画,字典转模型,Xib使用

大概如下图示:九个应用图标的样子 功能分析 (1)以九宫格的形式展示应用信息 (2)点击下载按钮后,做出相应的操作 步骤分析 (1)加载应用信息 (2)根据应用的个数创建对应的view (3)监听下载按钮点击 思路整理 要在支持文件夹里,放入 plist 文件,且拖拽素材到 supporting files,注意勾选的项目的区别: 大多数情况,往项目中拖拽素材时,通常选择 Destination, Folders:选择第一项:创建组,这样 xcode 导航显式的是黄色文件夹,要知道,Xcode中

【iOS开发-48】九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系

本次九宫格案例: (1)导入app.plist和各种图片素材,方便后续开发.实际开发中,也是如此. (2)把plist中数组导入进来. --因为本案例中app.plist最终是一个数组,数组里面是字典.所以我们需要一个数组类型来接受这个plist文件. --我们利用之前掌握的在变量的getter中进行延迟加载数据. #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NS

【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系

本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典.所以我们须要一个数组类型来接受这个plist文件. --我们利用之前掌握的在变量的getter中进行延迟载入数据. #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NS

九宫格计算,创建应用例子,字典转模型

#import "ViewController.h" #import "CZapp.h" //引用模型类 @interface ViewController () @property (nonatomic ,strong) NSArray* apps; //声明数组保存数据 @end @implementation ViewController //懒加载 -(NSArray *)apps { if (_apps==nil) { // 获取plist路径 NSStr

IOS开发UI基础之Plis文件-字典转模型

什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在?文件中进?行存储,程序启动后从?文件中 读取最新的数据.如果要变动数据,直接修改数据?文件即可,不?用修改代码 一般可以使?用属性列表?文件存储NSArray或者NSDictionary之类的数据,这 种“属性列表?文件”的扩展名是plist,因此也称为“plist?文件” 在Xcode创建plist文件的步骤: 解析

iOS开发——笔记篇&关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 1 /******************************************************************************/ 2 一:简单plist读取 3 4 1:定义一个数组用来保存读取出来的plist数据 5 @property (nonatomic, strong) NSArray *shops; 6 7 2:使用懒加载的方

关于字典转模型的个人理解

1.字典跟模型的优缺点比较: 1>字典在使用key的时候Xcode不会有提示,容易出错,模型就不会 2>①所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业 ②模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性 ③使用模型访问属性时,编译器会提供一系列的提示,提高编码效率 2.字典转模型的过程(中间加了一些个人想法) 1.>首先需要创建一个plist文件,将字典中的元素添加到plist文件中 注意:应该是创建的N

ios学习8_KVC和字典转模型

Key Value Coding是cocoa的一个标准组成部分,它能让我们能够通过name(key)的方式訪问属性,某些情况下极大地简化了代码.可称之为cocoa的大招. 例如以下的样例: 使用KVC的优点 不使用KVC - (id)tableView:(NSTableView *)tableview objectValueForTableColumn:(id)column row:(NSInteger)row { ChildObject *child = [childrenArray obje

UI基础字典转模型

一:字典转模型好处 1.使用字典的坏处 手敲字符串key,key容易写错 Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据 不面向对象 2.使用对象的好处 面向对象,对象把显示世界中的内容抽象到程序的世界,更直观,更接近人类的语言 所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性 使用模型访问属性时,编译器会提供一系列的提示,提高编码效率 二:1