1 懒加载:
1> 什么是懒加载?
懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法.
2> 特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化.
3> 优点:
- 不必将创建对象的方法都写在 viewDidLoad 里面,代码可读性更强.
- 每个控件的getter 方法分别负责各自的实例化处理,独立性强,耦合性低.
4> 使用步骤:
- 声明一个属性.该属性可以是私有属性也可以是在. h 文件中声明的属性.懒加载的对象是一个属性.
- 在.m 中的 viewDidLoad外面重写懒加载,即重写其 getter 方法
- 先判断 _对象 是否存在,如果不存在则,在 if 中实例化属性对象,并设置对象的属性,并添加其特有的方法
- 返回 _对象
2 字典转模型
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 路径把数据转到模型(数组)中 à 创建一个临时可变数组(用于盛放数据) à 遍历通过路径获取的数据 à 给临时数组赋值 à 将临时数组赋值给模型对象
3 自定义 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 中直接操作.
懒加载 字典转模型 自定义cell的更多相关文章
-
iOS 懒加载 字典转模型
>>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行 ...
-
iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view
一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...
-
[UIKit学习]06.懒加载,模型,自定义代码段,重写构造方法
懒加载 在get中加载,且只加载一次 - (NSArray *)shops { if (_shops == nil) { NSString *file = [[NSBundle mainBundle] ...
-
iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype
一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...
-
Vue 自定义图片懒加载指令v-lazyload
Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...
-
18-Angular 自定义模块以及配置路由模块懒加载
新建项目,新建几个子模块,实现懒加载 用户.商品.文章 新建这三个模块 创建模块的时候后面加 --routing.会自动生成模块的路由文件 先删掉. 重新创建模块带routing 这样就会生成两个文件 ...
-
django模型层优化(关联对象) 懒加载和预加载 +长链接
懒加载 存在于外键和多对多关系不检索关联对象的数据调用关联对象会再次查询数据库 问题根源 查看django orm的数据加载,两次. 查询user,查询menu 预加载的方法 预加载单个关联对象--s ...
-
Swift 学习一函数&;函数属性&;懒加载
函数 函数相当于OC中的方法 格式: func 函数名(参数列表) -> 返回值类型 { 代码块 return 返回值} func 函数名(参数列表){ // 返回值为Void 可 ...
-
Swift - 懒加载(lazy initialization)
Swift中是存在和OC一样的懒加载机制的,在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间 懒加载 格式: lazy var 变量: 类型 = { 创建变量代码 }() 懒 ...
随机推荐
-
重温WCF之群聊天程序(十)
完成的效果图: 服务器端代码: using System; using System.Collections.Generic; using System.Linq; using System.Serv ...
-
NHibernate扫盲
NHibernate中Get和Load的区别 (1) get()采用立即加载方式,而load()采用延迟加载; get()方法执行的时候,会立即向数据库发出查询语句, 而load()方法返回的是一个代 ...
-
【BZOJ 1951】 [Sdoi2010]古代猪文
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们*自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
-
OSGI在Eclipse中执行-console出错的问题
在Eclipse中安装osgi插件后,执行出现异常:
-
转 Oracle全文检索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm
SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') : PL/SQL 过程成功完成 SQL > E ...
-
c# 在datagridview中添加comboboxcolumn 绑定数据库读取显示数据
datagridview中的comboboxcolumn 从绑定的数据库中读取显示时,只需要注意一点,就是sql语句加个 CStr() 字符串转换函数即可,如下: SELECT CStr(XXX) a ...
-
【.NET】XML文件的创建,修改,删除
类名:XML /// 1.创建XML文档 /// 2.在根节点下增加子元素 /// 3.在元素下增加子元素 /// 4.获取类型为制定值的一组节点 /// 5.抓取网页上的xml文档赋值给XmlDoc ...
-
关于蓝桥杯嵌入式STM32的一点收获
各社团成员培训时自己总结的一点材料,直接粘过来的,可能有些朋友看不明白,总之这个比赛吧:有很多技巧,掌握到技巧能省我们半个月时间,我说的是针对这个比赛,对于STM32还是要多多练习,总之STM32还是 ...
-
inet_pton, inet_ntop
Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6.算是比较新的函数了. inet_ ...
-
CDRAF之Service mesh
最近翻看一些网上的文章,偶然发现我们的CDRAF其实就是Service mesh的C++版本.不管从架构的理念上,或者功能的支持上面,基本完全符合.发几个简单的文章链接,等有时间的时候,再来详细描述. ...