模型与字典

1. 用模型取代字典的好处

  • 使用字典的坏处

    • 编译器没有自动提醒的功能,需要手敲
    • key如果写错了编译器也不会报错

2. 模型概念

  • 概念

    • 专门用来存放数据的对象
  • 特点
    • 一般继承自NSObject
    • 在.h文件中声明一些用来存放数据的属性
  • 注释
    • //单行注释
    • / /多行注释
    • //文档注释,调用属性时会显示出来文档注释
  • 使用模型的好处
    • 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
    • 使用模型访问属性的时候,编译器会提供一系列的提示,提高编码效率

3. 九空格

  • 创建步骤

    • 商品

      • 懒加载
      • 创建一个可变数组
      • 获取plist的全路径
      • 获取plist中的字典数据
      • 将字典数组转换成模型数组
      • 将模型数组添加到模型数组中
    • 添加
      • 总列数
      • 获取当前商品的索引
      • 设置商品的宽度和高度
      • 设置商品的位置
      • 创建一个父控件
      • 将父控件添加到大的View中
      • 添加一个图片
      • 添加文字
      • 设置数据
      • 设置按钮的状态
    • 删除
      • 设置按钮的状态
      • [self.shopsView.subviews.lastObject removeFromSuperview];//删除最后一个元素

4. @property的使用策略

  • assign

    • 基本数据类型,枚举,结构体等非OC对象类型
  • weak
    • OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
    • 一般使用在UI控件上
  • strong
    • OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
    • 一个对象只要有强引用引用着,就不会被销毁
  • copy
    • 一般用在NSString / block上

5. 通过纯代码创建自定义控件

  • 继承自系统自带的控件,写一个属于自己的控件
  • 目的:封装控件内部的细节
  • 步骤
    • 新建一个继承UIView的类
    • initWithFrame方法中添加子控件
      • init内部会自动调用initWithFrame方法
      • 因此应该重写initWithFrame方法
    • layoutSubViews(子控件布局)中设置子控件的frame
      • 当空间的尺寸发生改变时就会调用layoutSubViews
      • 一定要先调用[super layoutSubViews];
    • 提供一个模型属性,重写模型属性的set方法
      • 在set方法中取出模型属性,给对应的子控件赋值

6. 通过Xib自定义控件

  • 步骤

    • 新建一个继承UIView的类
    • 新建一个xib文件(文件名最好跟控件类名一样)
      • 添加子控件
      • 设置子控件的属性
      • 修改最外面的控件class为控件的类名
      • 将子控件进行连线
    • 提供模型属性,重写模型的set方法
      • 在set方法中给子控件设置数据
  • xib文件编译成功后就是nib文件

  • 加载方式
    • 方法1
如果bundle mainbundle的参数是nil,默认去mainbundle中找
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil option:nil];
     方法2
UINib*nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil option:nil];
  • 步骤

    • 新建自定义控件类
    • 新建Xib文件
    • 修改xib中view的类名(只能修改成同类型的类)
    • 封装xib的加载过程
    • 拖线
    • 增加模型属性,在模型属性的set方法中设置数据到子控件上
  • xib和storyboard对比
    • 共同点:

      • 都用来描述软件界面
      • 都用Interface Builder工具来编辑
      • 本质都是转换成代码去创建控件
    • 不同点
      • Xib是轻量级的,用来描述局部的UI界面 S toryboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

6. 知识点

  • 如果这个控件不是通过xib\storyboard创建,初始化时会调用initWithFrame:(CGRect)frame;
  • 如果是通过xib\storyboard创建,初始化时会调用initWithCoder:(NSCoder *)aDecoder;
  • 如果是通过xib\storyboard创建,初始化完毕后会调用awarkFromNib
  • Xib与storyboard对比

7. 类前缀

  • NS --> Next Step
  • UI --> User Interface
  • AV --> Audio Player

plist文件

  • 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件”

1.解析Plist文件

  • 下来通过代码来解析Plist文件中的数据

    • 获得Plist文件的全路径

      NSBundle *bundle = [NSBundle mainBundle];
      NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];
    • 加载plist文件 
      objc _shops = [NSArray arrayWithContentsOfFile:path];

2.使用注意

  • plist的文件名不能叫做“info”、“Info”之类的

  • 添加plist等文件资源的时候,一定要勾选Destination:copy items if needed/Added folders:Create groups/Add to targets:非test项目

Plist文件和字典转模型的更多相关文章

  1. iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view

    一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...

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

    关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 /************************************ ...

  3. 解析plist文件(字典里包着数组,数组中又包含字典)

    #import "RootTableViewController.h" #import "City.h" @interface RootTableViewCon ...

  4. iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype

    一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...

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

    什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程 ...

  6. 归档-对模型数组对象(存储到本地的plist文件)也数组里存放的是模型

    一.模型文件 (1)JLMainViewsModel.h文件 必须遵循 NSCoding协议 @interface JLMainViewsModel : NSObject<NSCopying,N ...

  7. 获取保存在沙盒中plist文件的用户的字典信息

    获取保存在沙盒中plist文件的用户的字典信息

  8. iOS-图片浏览器(字典和plist文件的使用)

    // //  ViewController.m //  19-图片浏览器 // //  Created by hongqiangli on 2017/7/31. //  Copyright © 201 ...

  9. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

随机推荐

  1. 我罗斯方块第二次作业(Player类)

    我罗斯方块第二次作业 我的任务 完成player类的编写 player类的测试 我的计划 类的设计: Player类作为一个玩家类,需要处理和玩家有关的所有信息,以及维护玩家的游戏页面map.关于玩家 ...

  2. Python 练习 进程

    ... """ 创建2个进程, 每一个进程都打出当前的时间和进程的标识,持续打十次. """ import multiprocessing ...

  3. 【linux系统】java环境搭建

    搭建步骤 1.安装java : 上传java安装包到linux系统----- rz jdk-8u202-linux-x64.tar.gz jdk下载地址:https://www.oracle.com/ ...

  4. 收集的常用的CTF学习资源网站

    http://www.sec-wiki.com/skill/        安全技能学习路线(迷茫就看它) https://wiki.x10sec.org/       介绍了CTF各个方向的基础知识 ...

  5. c语言是如何解析表达式语句"2+3*4;"的?

    1.  要编译的测试代码: int main(void) { 2+3*4; } 2. 词法分析 词法分析将字符变成token,其中很重要的是token的类型,如字符2的token类型为TK_NUM,这 ...

  6. C++构造函数写法

    笔记 class complex{ public: complex (double r = 0, double i = 0) : re(r), im(i) {} private: double re, ...

  7. 【k8s】在AWS EKS部署并通过ALB访问k8s Dashboard保姆级教程

    本教程适用范围 在AWS上使用EKS服务部署k8s Dashboard,并通过ALB访问 EKS集群计算节点采用托管EC2,并使用启动模板. 使用AWS海外账号,us-west-2区域 使用账号默认v ...

  8. try catch引发的性能优化深度思考

    关键代码拆解成如下图所示(无关部分已省略): 起初我认为可能是这个 getRowDataItemNumberFormat 函数里面某些方法执行太慢,从 formatData.replace 到 une ...

  9. Mac Maven 安装及配置

    一.下载 打开 Maven 官方下载页面:https://maven.apache.org/download.cgi#,点击下载链接即可开始下载:     以 Maven 3.8.4 为例,解压后可以 ...

  10. javaSE基础复习

    第一天:复习java入门知识,jvm内存,java程序执行流程,数据类型,变量和自动类型转换,运算符... 学习java目的:起初是因为想找工作,拿高薪.后来逐渐在学习java技术的过程中渐渐循喜欢上 ...