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

相关文章

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

python如何创建等差数列

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

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

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