首页 > 懒加载 字典转模型 自定义cell

懒加载 字典转模型 自定义cell

懒加载:

1>  什么是懒加载?

懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法.

2>  特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化.

3>  优点:

  •  不必将创建对象的方法都写在 viewDidLoad 里面,代码可读性更强.
  •  每个控件的getter 方法分别负责各自的实例化处理,独立性强,耦合性低.

4>  使用步骤:

  •  声明一个属性.该属性可以是私有属性也可以是在. h 文件中声明的属性.懒加载的对象是一个属性.
  •  在.m 中的 viewDidLoad外面重写懒加载,即重写其 getter 方法
  •  先判断 _对象 是否存在,如果不存在则,在 if 中实例化属性对象,并设置对象的属性,并添加其特有的方法
  •  返回 _对象

 

字典转模型

1>   什么是字典转模型?

字典数据/数组(可以是 plist 文件中的数据也可以是网络后台的数据等)转化为模型对象/数组.

2>   注意

模型要提供可以传入字典参数的构造方法.(一个对象方法一个类方法)

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)xxxWithDict:(NSDictionary *)dict;

3>   提示:在模型中尽量的使用自读属性可以进一步降低代码的耦合性

4>   优点:

  •  将字典中的数据封装到一个模型类中,有 MVC 框架思想的优点,可以降低耦合性
  •  所有的字典转模型可以写在一处,便于管理,同时也可以降低代码的出错率
  •  字典转模型后,直接把字典中的数据转移到模型的属性中,外界可以直接调用模型的属性来获取数据,从而可以提高代码的编码效率
  •  由于模型是一个单独的类中进行的,外界不用关心类中的细节,只要使用就可以,更好的体现了面向对象的思想.

5>   使用步骤

  •  在模型的.h 文件中声明所需要的所有属性
  •  在模型的.h实例化两个方法

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)appInfoWithDict:(NSDictionary *)dict;

  •  在模型的.m 文件中,通过实现两个方法获取数据

- (instancetype)initWithDict:(NSDictionary *)dict{

   self = [super init];

     if (self) {//给声明的属性赋值

         self.name = dict[@"name"];

         self.icon = dict[@"icon"];

     }

     return self;

}

+ (instancetype)appInfoWithDict:(NSDictionary *)dict{

     return [[self alloc] initWithDict:dict];

}

  •  声明要空控件的属性,并懒加载中直接实例化赋值
  •  在 VC 的. m 文件中声明一个目标控件的属性
  •  懒加载控件,并在懒加载的判断为空的时候,通过 bundle à path à 通过 path 路径把数据转到模型(数组)中 à 创建一个临时可变数组(用于盛放数据) à 遍历通过路径获取的数据 à 给临时数组赋值 à 将临时数组赋值给模型对象

自定义 cell

1>  什么是自定义 cell

自定义 cell 即 tableView,collectionView,scrollView中的 cell 使用的时候不能满足我们使用 cell 的需求,需要自己定义一个 cell.

2>  优点:

  •  自定义 cell 是继承自系统的 cell, 因此它具有系统 cell 的所有的属性和方法
  •  自定义 cell 可以在自定义的类中扩展属性和方法,供外界使用.

3>  使用方法

自定义 cell 的方法有三种

  •  纯代码

1 在自定义 cell 类的.h 文件中声明要增加的属性和方法

2 在自定义cell 类的.m 文件中实现增加的方法.

该类的构造方法 initWithStyle:--- reuseIdentify 方法

调用父类的构造方法

判断 self是否存在

返回 self

3 在 VC 中的数据源方法中的第三个方法中将系统的 cell 换成自定义的 cell 的类即可拥有自定义 cell 扩展的属性和方法.

先创建一个 static 的重用标示符,然后通过重用标示符去重用池中寻找,假如通过重用标示符找不到 cell 则通过自定义的 cell 创建 cell, 最后返回 cell.

  •  Xib

实现步骤:

1 创建一个类 继承自 UITableViewCell/

UICollectionViewCell/UIScrollViewCell

2 创建一个和步骤一同名的 xib

3 将一个 cell拖到xib窗口中,并在属性检查器上

    (1)修改Custom Class为 创建从类名

    (2)设定其重用标识符(Identifier),该重用标示符要和 VC 中定义的重用标示符一样.

      4 在 xib 中进行布局

5 将 xib 中的控件拖线到cell上

6 使用的时候,和纯代码使用类似,只是将创建 cell 的方法改用为 xib 的方法

  •  storyboard

该方法是最简单的一种方法,但缺点也很多,在开发中基本上用不到,思路就是在storyboard的 cell 中直接操作.

 

转载于:https://www.cnblogs.com/ansyxpf/p/5494240.html

更多相关:

  • 来源:公众号|计算机视觉工坊(系投稿)作者:仲夏夜之星「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、...

  • 点云PCL免费知识星球,点云论文速读。文章:Real-Time LIDAR-Based Urban Road and Sidewalk Detection for Autonomous Vehicles作者:Ern˝o Horváth  , Claudiu Pozna ,and Miklós Unger编译:点云PCL代码:http...

  • 文章:Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment作者:Xiyue Guo, Junjie Hu, Junfeng Chen, Fuqin Deng, T...

  • 点云PCL免费知识星球,点云论文速读。文章:Robust Place Recognition using an Imaging Lidar作者:Tixiao Shan, Brendan Englot, Fabio Duarte, Carlo Ratti, and Daniela Rus编译:点云PCL(ICRA 2021)开源代码:...

  • 文章:A Survey of Calibration Methods for Optical See-Through Head-Mounted Displays作者:Jens Grubert , Yuta Itoh, Kenneth Moser编译:点云PCL本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PD...

  • The difference between acceptable cell and suitable cell in LTE is given below. acceptable cell In a area where UE is not able to find any suitable cell to camp on...

  • 文档树Document Object Model (DOM) 为文档对象模型, 它使用对象的表示方式来表示对应的文档结构及其中的内容。下面为一个样例 p 元素在文档中的对象所包含的所有属性。控制台:p#domaccessKey: ""align: ""assignedSlot: nullattributeStyleMap: Style...

  • 1、封装 什么是封装?   1.对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口     注意:封装有隐藏的意思,但不是单纯的隐藏     学习封装的目的:就是为了能够限制外界对内部数据的访问   python中属性的权限分为两种:   1.公开的     没有任何限制,谁都可以访问   2.私有的     只有当前类本身能狗...

  • jquery:js框架; 主要区别在dom的操作 jq需要引入文件并且引入顺序在最上面; 找元素 操作元素 js:doucument.getElementById..classname,tagname,name jq:$(选择器) dom是js对象 jqDom是jquery对象 操作内容 js:dom.innerHTML(非表单元素)...

  • Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD)数据占位符定义规范(Data Placeholder Definition,DPD)1.数据模板定义规范 DTD 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值: // 属性名 name // 生...

  • vue   vue.js 是用于构建交互式的 Web 界面的库。它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单、灵活的 API。从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并通过双向数据绑定连接视图和模型。实际的 DOM 操作和输出格式被抽象出来成指令和过滤器。相比其它的 MVVM 框架,Vue.j...