iPhone开发之字典转模型——利用创建plist文件和懒加载

2024-08-28 16:32

本文主要是介绍iPhone开发之字典转模型——利用创建plist文件和懒加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、例如九宫格直接从文件中读取信息进行设置创建。但是可重用性不强,如果要在另一个新的控制器中创建一个类似的九宫格,就要把代码整体复制过去进行改动。
2、解决思路:把代码提取出来。
3、xib和storyboard都是用来描述软件界面的。区别如下:
xib是一个 轻量级的软件界面。轻量级意思就是只用来描述一个局部的小的View。  storyboard是一个重量级的描述界面,一般用来描述多个手机界面,以及不同界面之间的跳转。
4、字典转模型
1> 为什么要把字典转模型?
**字典缺陷:
0> 字典属性代码无智能提示。但模型有提示。
1>“键”是字符串,如果写错了,编译器不报错,运行时可能出错,出错了很能找错。
2> 使用“模型”可以方便的使用面向对象的3大特性(封装、继承、多态)性进行扩展。
**什么是模型?  “模型”就是自定义的类,通过为“类”增加各种属性来保存数据。
**字典转模型需要修改哪里的代码?
1> 创建一个模型类
2> 在懒加载的时候,把加载到的数据都放到模型对象中,然后再把模型对象放到数组中。
**  把字典转模型的过程封装到“模型”内部
*原因:将来的这个”模型”可能会在很多地方被用到(比如有很多控制器都会使用这个模型),那么每次用到模型的地方都需要写一次把字典中的数据赋给模型属性的代码,此时如果把这些赋值语句封装到模型内部,会大大简化了使用复杂度与代码量。
*思路:
1>在模型中接受一个NSDictionary的参数,然后在模型内部把NSDictionary中的数据赋值给模型的属性。
2> 封装一个initWithDict方法和一个appWithDict方法。
建议:将模型中的属性名和文件中字典的键值属性相一致。
注意:模型类都建在Supporting  files文件夹下。
5、字典转模型的步骤:
(1)新建.plist文件,根据图片和文字信息编辑.plist文件内容。
(2)在工程的Supporting  files文件夹下新建一个model模型类(CZApp),在类的.h文件中新建成员属性,类型和属性名与plist文件中数组中每个字典元素中的各个键属性一致。
(3)在控制器的.h文件中新建NSArray数组属性app(@property)。
(4)重写数组属性的get方法实现懒加载。
懒加载步骤:
1>  判断下划线数组变量是否为nil,如果为空则开始加载
2> 获取app.plist文件在手机上的路径
3>根据路径加载数据
4>创建一个可变数组用来保存每个模型对象
5> 循环字典数组,把每个字典对象转换成一个模型对象
6> 把可变数组对象赋值给下划线数组变量属性
7>返回下划线数组变量即可  ,具体代码如下所示:
-(NSArray *)apps
{
  if(_apps == nil){
   // 1、获取app.plist文件在手机上的路径
NSString *path = [[NSBundle mainBundle] pathFOrResource:@“app.plist” ofType:nil];
  // 2、根据路径加载数据
NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path];
  // 3、创建一个可变数组用来保存每一个模型对象,
NSMutableArray *arrayModels=[NSMutableArray  array];// 一个空的可变数组
   //4、循环字典数组,把每一个字典对象转换成每一个模型对象
  for(NSDictionary *dict  in  arrayDict)
{
      // 创建一个模型
CZApp  *model = [[CZApp alloc] init];
  model.name = dict[@“name”];
  model.icon  =dict[@“icon”];
    // 将模型加到arrayModels中
[arrayModels  addObject: model];
}
    _apps = arrayModels;
  }
return _apps;
}
6、以上步骤改进方案:当字典的键值对很多,即对象属性很多时就会添加很多的代码。
改进方法如下:
(1)为模型类添加初始化对象方法或类方法,参数传进一个字典类型。方法具体声明代码如下:
-(CZApp *)initWithDict:(NSDictionary *)dict;
+(CZApp  *)appWithDict:(NSDictionary *)dict;
(2)方法的实现代码如下:
-(CZApp *) initWithDict:(NSDictionary *)dict
{
   if(self=[super init])
  {
      self.name = dict[@“name”];
      self.icon = dict[@“icon”];
   }
   return self;
}
-(CZApp  *)appWithDict:(NSDictionary *)dict
{
    return  [[self alloc]  initWithDict:  dict];
}
7、最后改进:把模型对象初始化方法的返回值类型改为instancetype。
id与instancetype的介绍:
(1)使用id作为方法返回值的问题:
在接收方法的返回值的时候可以使用任意类型来接收,编译都不报错,但运行时可能出错。
(2)instancetype需要注意的几点:
1> instancetype在类型表示上与id的意思一样,都表示任意对象类型。
2>instancetype只能用作返回值类型,不能像id一样声明变量、用作参数等。
3>使用instancetype,编译器会检测instancetype的真实类型,如果类型不匹配,编译时就出错了(instancetype出现在那个类型中就表示对应的类型)
8、总结:
(1)模型中必须封装初始化对象方法和类方法
(用来传进一个字典类型的参数)
(2)字典转模型:把字典中的数据用模型来保存 。新建一个类,根据键值对的个数,来编写这个类中的属性,将来用这个类的对象的属性来保存字典中每个键对相应的值。















































这篇关于iPhone开发之字典转模型——利用创建plist文件和懒加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115288

相关文章

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部