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实例题之pygame开发打飞机游戏实例代码

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

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创