懒加载 字典转模型 自定义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 中直接操作.

时间: 2024-10-23 04:41:11

懒加载 字典转模型 自定义cell的相关文章

懒加载 字典转模型

>>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行实例化. 二.优点 不必将创建对象的方法都写在viewDidLoad里面,代码可读性更强. 每个控件的getter方法分别负责各自的实例化处理,独立性强,耦合性低. 三.使用 声明一个属性,该属性既可以是私有属性也可以是在.h中声明的属性,懒加载的对象是一个属性. 在.m文件中的viewDidLoad外面重写

UI基础——懒加载,plist文件,字典转模型,自定义view

一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控制器的view创建完毕就会调用,该方法只会调用一次 @property (nonatomic, strong)NSArray *shops; - (void)viewDidLoad { [super viewDidLoad]; if (self.shops == nil) { NSLog(@"创建商

字典转模型和懒加载

1.字典转模型 创建一个类,继承自NSObject,属性名和字典的键一致 可以实现字典转模型 @implementation TZMessage +(instancetype)messageWithDict(NSDictioary*)dict{ TZMessage *mode = [[TZMessage alloc] init]; [mode setValuesForKeysWithDictonary:dict]; return mode; } 2.懒加载 +(NSArray *)message

调查管理系统 -(6)自定义Struts2的拦截器&自定义UserAware接口&Action中模型赋值问题&Hibernate懒加载问题

1.对于一些功能,如我的调查或新建调查等,只有用户登录后才能进行操作,因此必须对用户是否登录进行判断.当用户登录后才能使用相应的功能,如果没有登录则需为用户导航到登录页面让其进行登录.这个功能可以通过自定义Struts2的拦截器来完成. 2.当用户登录之后,由于是将用户的信息保存在session中的.这样当一些Action中需要用到当前登录的用户的信息时需要手动的从session中获取,不太方便,因此我们声明了一个UserAware接口(即用户关注,类似于Struts2中的SessionAwar

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

一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码 3>一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也成为“plist文件” 二.创建plist文件 三.解析plist文件 代码实

进击的UI-------------多种Cell混合使用&懒加载&自适应高度

1.自定义控件 2.model 3.多种cell混合使用 4自适应高度 5.懒加载

Vue 自定义图片懒加载指令v-lazyload

Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: <img v-lazyload="imageSrc" > imageSrc是要加载的图片的实际路径. 为了实现这个指令,我们首先单独建立一个文件,名字为lazyload.js.并填写基本的代码,如下: //Vue 图片懒加载,导出模块 export default (Vue , o

struts2 模型赋值问题和懒加载问题

模型赋值问题: 首先需要说明的是:Action在请求到达ActionProxy时已经创建出来了,并且相应的创建了一个值栈. 在拦截器到达之前这个图片已经OK了,Action已经创建,并且压入了值栈vs,而且model对象也已经初始化. 模型驱动(ModelDriven)从Action取出模型对象并把它压入栈顶 在执行完所有的拦截器后开始调用Action方法,并对模型进行赋值,(这个从service取出的新模型对象并未压入值栈)但是此时值栈中的模型对象还是旧模型,所以jsp中引用的还是旧模型的对象

iOS中UITableView--(从plist读取数据到model,实现懒加载, TableView的数据加载)

#import "RootViewController.h" #import "Htohero.h" @interface RootViewController ()<UITableViewDataSource> @property (nonatomic, retain) NSArray *apps; @end @implementation RootViewController - (void)viewDidLoad { [super viewDidL