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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定