模型与字典

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. 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup

    攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...

  2. celery tasks always in pending

    Result backend doesn't work or tasks are always in PENDING state¶All tasks are PENDING by default, s ...

  3. Java学习(十三)

    今天学习了Java中的继承,Java的继承和c++的差别很大. 继承的基本作用是代码复用,但最重要的作用是为了以后的"方法覆盖"和"多态机制". 继承的语法是: ...

  4. vuex基础(vuex基本结构与调用)

    import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const modulesA = { state:{//状态 count: ...

  5. Ubuntu系统下《汇编语言》环境配置

    说明 1.系统:Ubuntu codists@pc:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Des ...

  6. selenium的 元素定位、元素信息、交互

    selenium的元素定位? 元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击.输入等等.操作这些元素前首先 要找到它们,WebDriver提供很多定位元素的方法 方法: 1.fin ...

  7. 理解PHP的运行机制

    PHP是一种纯解释型在服务端执行的可以内嵌HTML的脚本语言,尤其适合开发Web应用程序.请求一个 PHP 脚本时,PHP 会读取该脚本,并将其编译为 Zend 操作码,这是要执行的代码的一种二进制表 ...

  8. shell脚本训练

    *注:shell中的/data目录为自创练习目录 1,编写脚本systeminfo.sh,显示当前主机系统信息.包括主机名,IPV4地址,操作系统版本,内核版本,cpu型号,内存大小,硬盘大小 结果: ...

  9. [bzoj1113]海报

    ans肯定不会超过n,因为我们可以每一列都放一个矩阵考虑减小答案,肯定是要放横的,也就是让两个高度一样的矩阵同时被消除掉,那么中间不能存在比他们低的矩阵问题即判断一个点之前第一个小于等于它的点是不是等 ...

  10. mysql变成类型字段varchar值更新变长或变短底层文件存储原理

    为了搞清楚MySQL对于可变长度字段值修改时,如何高效操作数据文件的机制.之前一直模糊不清,网上也搜不到现成的答案.经过多方资料搜集整理.写出此文供大家一起参阅.由于涉及众多非常底层的知识,我假设读者 ...