懒加载(LazyLoad),又称为延迟加载。

举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动经过了,图片就开始加载了,这样用户体验就不太好,而且浪费内存.这个时候,我们就可以利用lazy加载技术,当界面滑动或者滑动减速的时候,都不进行图片加载,只有当用户不再滑动并且减速效果停止的时候,才进行加载.

懒加载的好处:

1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

3>只有当真正需要资源时,再去加载,节省了内存资源。

提醒1):这是苹果公司提倡的做法。其实苹果公司做的IOS系统中很多地方都用到了懒加载的方式,比如控制器的View的创建。

提醒2):空加载的时候,一定要使用点语法,也就是咱们所说的getter方法。

下面举个懒加载的例子:

1> 定义控件属性,注意:属性必须是strong的,示例代码如下

@property (nonatomic, strong) NSArray *imageList;

2> 在属性的getter方法中实现懒加载,示例代码如下:

// 懒加载-在需要的时候,在实例化加载到内存中
- (NSArray *)imageList
{// 只有第一次调用getter方法时,为空,此时实例化并建立数组if (_imageList == nil) {// File表示从文件的完整路径加载文件NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];NSLog(@"%@", path);_imageList = [NSArray arrayWithContentsOfFile:path];}return _imageList;
}

如上面的代码,有一个_imageList属性,如果在程序的代码中,有多次访问_imageList属性,例如下面

self.imageList ;self.imageList ;self.imageList ;

虽然访问了3次_imageList 属性,但是当第一次访问了imageList属相,imageList数组就不为空,
当第二次访问imageList 时  imageList != nil;程序就不会执行下面的代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];NSLog(@"%@", path);_imageList = [NSArray arrayWithContentsOfFile:path];

就不会再次在PList文件中加载数据了。

转载于:https://www.cnblogs.com/sixindev/p/4468719.html

懒加载--初步理解. by:王朋相关推荐

  1. FetchType.LAZY和FetchType.EAGER什么区别?(懒加载和急加载的理解)

    1.FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载. 2.FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载. ...

  2. 简单理解hibernate懒加载

    遇到问题代码 @GetMapping("/{id}")public Coffee getById(@PathVariable Long id) {Coffee coffee = c ...

  3. Vue-Router + Webpack 路由懒加载实现

    一.前言 https://segmentfault.com/a/1190000015904599 当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分 ...

  4. Mybatis学习第四天:Mybatis延迟加载懒加载,一级缓存,二级缓存,注解开发

    文章目录 Mybatis中的延迟加载 一对一进行延迟加载 一对多的延迟加载 缓存机制: 一级缓存 二级缓存 注解开发 注解开发--单表的增删改查 注解开发--建立表与实体类的对应关系 注解开发--多表 ...

  5. swift_043(Swift 懒加载(lazy) )

    懒加载的优点 懒加载(lazy load),其实是延时加载,它的优点显而易见,首先,懒加载将对象的创建延迟到了需要对象的时候,这样减少了内存开销:其次,懒加载将创建对象.相关属性设置内聚在一个&quo ...

  6. (0020)iOS 开发之-设计模式-懒加载解惑

    提醒:这是苹果公司提倡的做法.其实苹果公司做的IOS系统中很多地方都用到了懒加载的方式,比如控制器的View的创建. 懒加载:也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,其 ...

  7. 小程序之图片懒加载[完美方案,你不来看看?]

    效果图 既然来了,把妹子都给你. 定义 懒加载,前端人都知道的一种性能优化方式,简单的来说,只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来.这就是图片懒加载. 实现原理 监 ...

  8. Spring 天天用,bean 懒加载原理你懂吗?

    来源:小小木的博客 www.cnblogs.com/wyc1994666/p/10569091.html 普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是 ...

  9. Entity Framework Core 懒加载

    众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载.不过现在EF Core的开发团队打算 ...

最新文章

  1. 上海临港新片区:新建数据中心CPUE值≤1.25 正建国际互联网数据专用通道
  2. (42)FPGA面试题时钟抖动和时钟偏移
  3. 底层I/O性能大PK:Python/Java被碾压,Rust有望取代C++
  4. Spring事务管理,使用@Transactional注解
  5. glassfish启动后不能进入部署页面_使用Jenkins实现项目持续集成部署
  6. ensp的p2p网络与虚拟专线实验
  7. linux 如何进入bios设置密码,linux系统怎么不输入密码得到系统的BIOS...-卓优商学院问答...
  8. 厦门92坐标参数讨论
  9. Ubuntu18.04 显卡驱动安装(GTX1060)正确步骤
  10. Python的缩进问题unindent does not match any outer indentation level
  11. 下列属于mysql流程控制的是什么_下面选项中,不属于MySQL中流程控制语句的有...
  12. 深度学习中神经网络的几种权重初始化方法
  13. 拼多多店铺的先用后付|盛天海科技
  14. LeetCode 954. 二倍数对数组
  15. 改变世界的17个方程式,你认识几个?
  16. FRM 5.2 资本资产定价模型
  17. Objective-c 学习笔记(二)
  18. 极智Paper | YOLOv7 更高 更快 更强
  19. spark官方配置参数详解
  20. 层叠上下文-《CSS 世界》阅读笔记

热门文章

  1. 【HDU 2814 扩展欧拉 a^b ≡ (a mod c)^b mod ϕ(c)+ϕ(c) modc,b=ϕ(c) 】
  2. hbase 读写调优_hbase优化操作与建议
  3. Python画散点图(Knn中数据)
  4. 信号处理之filter去噪
  5. maven和gradle中,dependency和plugin的区别
  6. 2017-2018-1 20155231 《信息安全系统设计基础》第6周学习总结
  7. 15.Three Sum
  8. 路由器原理及作用以及交换机
  9. 详细配置架设自己的Serv-U FTP服务器图文教程
  10. free malloc