1.懒加载基本

懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.

注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化

2.使用懒加载的好处:

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

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

3.代码示例

  1. 1 //
  2. 2 // YYViewController.m
  3. 3 // 03-图片浏览器初步
  4. 4 //
  5. 5 // Created by apple on 14-5-21.
  6. 6 // Copyright (c) 2014年 itcase. All rights reserved.
  7. 7 //
  8. 8
  9. 9 #import "YYViewController.h"
  10. 10
  11. 11 #define POTOIMGW 200
  12. 12 #define POTOIMGH 300
  13. 13 #define POTOIMGX 60
  14. 14 #define POTOIMGY 50
  15. 15
  16. 16 @interface YYViewController ()
  17. 17
  18. 18 @property(nonatomic,strong)UILabel *firstlab;
  19. 19 @property(nonatomic,strong)UILabel *lastlab;
  20. 20 @property(nonatomic,strong)UIImageView *icon;
  21. 21 @property(nonatomic,strong)UIButton *leftbtn;
  22. 22 @property(nonatomic,strong)UIButton *rightbtn;
  23. 23 @property(nonatomic,strong)NSArray *array;
  24. 24 @property(nonatomic ,assign)int i;
  25. 25 -(void)change;
  26. 26 @end
  27. 27
  28. 28
  29. 29
  30. 30 @implementation YYViewController
  31. 31
  32. 32 - (void)viewDidLoad
  33. 33 {
  34. 34 [super viewDidLoad];
  35. 35 [self change];
  36. 36 }
  37. 37
  38. 38 -(void)change
  39. 39 {
  40. 40 [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
  41. 41 //先get再set
  42. 42
  43. 43 self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];
  44. 44 self.lastlab.text=self.array[self.i][@"desc"];
  45. 45
  46. 46 self.leftbtn.enabled=(self.i!=0);
  47. 47 self.rightbtn.enabled=(self.i!=4);
  48. 48 }
  49. 49
  50. 50 //延迟加载
  51. 51 /**1.图片的序号标签*/
  52. 52 -(UILabel *)firstlab
  53. 53 {
  54. 54 //判断是否已经有了,若没有,则进行实例化
  55. 55 if (!_firstlab) {
  56. 56 _firstlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
  57. 57 [_firstlab setTextAlignment:NSTextAlignmentCenter];
  58. 58 [self.view addSubview:_firstlab];
  59. 59 }
  60. 60 return _firstlab;
  61. 61 }
  62. 62
  63. 63 /**2.图片控件的延迟加载*/
  64. 64 -(UIImageView *)icon
  65. 65 {
  66. 66 //判断是否已经有了,若没有,则进行实例化
  67. 67 if (!_icon) {
  68. 68 _icon=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
  69. 69 UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
  70. 70 _icon.image=image;
  71. 71 [self.view addSubview:_icon];
  72. 72 }
  73. 73 return _icon;
  74. 74 }
  75. 75
  76. 76 /**3.描述控件的延迟加载*/
  77. 77 -(UILabel *)lastlab
  78. 78 {
  79. 79 //判断是否已经有了,若没有,则进行实例化
  80. 80 if (!_lastlab) {
  81. 81 _lastlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
  82. 82 [_lastlab setTextAlignment:NSTextAlignmentCenter];
  83. 83 [self.view addSubview:_lastlab];
  84. 84 }
  85. 85 return _lastlab;
  86. 86 }
  87. 87
  88. 88 /**4.左键按钮的延迟加载*/
  89. 89 -(UIButton *)leftbtn
  90. 90 {
  91. 91 //判断是否已经有了,若没有,则进行实例化
  92. 92 if (!_leftbtn) {
  93. 93 _leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
  94. 94 _leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
  95. 95 [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
  96. 96 [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
  97. 97 [self.view addSubview:_leftbtn];
  98. 98 [_leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
  99. 99 }
  100. 100 return _leftbtn;
  101. 101
  102. 102 }
  103. 103
  104. 104 /**5.右键按钮的延迟加载*/
  105. 105 -(UIButton *)rightbtn
  106. 106 {
  107. 107 if (!_rightbtn) {
  108. 108 _rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
  109. 109 _rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
  110. 110 [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
  111. 111 [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
  112. 112 [self.view addSubview:_rightbtn];
  113. 113 [_rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
  114. 114 }
  115. 115 return _rightbtn;
  116. 116 }
  117. 117
  118. 118 //array的get方法
  119. 119 -(NSArray *)array
  120. 120 {
  121. 121 if (_array==nil) {
  122. 122 NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
  123. 123 _array=[[NSArray alloc]initWithContentsOfFile:path];
  124. 124 }
  125. 125 return _array;
  126. 126 }
  127. 127
  128. 128 -(void)rightclick:(UIButton *)btn
  129. 129 {
  130. 130 self.i++;
  131. 131 [self change];
  132. 132 }
  133. 133
  134. 134 -(void)leftclick:(UIButton *)btn
  135. 135 {
  136. 136 self.i--;
  137. 137 [self change];
  138. 138 }
  139. 139
  140. 140 @end

IOS懒加载的更多相关文章

  1. iOS 懒加载模式

    感谢: chengfang iOS开发-懒加载 1.懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否 ...

  2. ios 懒加载详解

    iOS开发之懒加载 在iOS开发中几乎经常用到懒加载技术,比如我们存放网络数据的数组,控制器的view,控件的自定义,复杂的运算逻辑等等情况下都会用到懒加载技术,那么什么是懒加载呢?? 他又有什么样的 ...

  3. iOS 懒加载不起作用的原因

    在.m类中定义了一共strong属性,用懒加载getter方式去处理,发现用的时候无论如何属性都是null,调试后,发现根本没进getter方法. (ps:懒加载,又称为延迟加载.说的通俗一点,就是在 ...

  4. iOS - (懒加载)

    今天很坑爹,做界面的时候,tableview 明显做了复用了,数组也做了懒加载了,获取数据前也把数组给清空了,但是每次获取数据刷新表格的时候,数据确重复覆盖了(重复创建),后来给 cell 加了个白色 ...

  5. iOS 懒加载 字典转模型

    >>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行 ...

  6. iOS之weak和strong、懒加载及循环引用

    一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...

  7. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  8. iOS开发UI中懒加载的使用方法

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...

  9. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

随机推荐

  1. Git ——分布式版本控制系统

    Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...

  2. 转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程

    一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包.这 ...

  3. JavaScript 继承

    许多OO语言都支持两种继承方式,接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.由于在ECMAScript中,函数没有签名,无法实现接口继承,只支持实现继承,而且其实现继承主要 ...

  4. 一款新的PYTHON数据科学利器:yhat

    偶然看文章发现的一个新的python IDE,外表很清新,也很新颖. https://www.yhat.com/products/rodeo 看图说话,软件的布局确实很新颖,和Notebook类似,也 ...

  5. <![CDATA[]]>作用

    <![CDATA[]]>的作用是让XML解析器将标签中的字符串当作普通文本对待,以防止某些字符串对XML格式造成破坏.

  6. 【转】 linux 下Time_wait过多问题解决

    问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放.看了一下18888,当时吓到了. 现象: 1.外部机器不能正常连接S ...

  7. Spring 国际化

    http://www.xdemo.org/spring-i18n/ xxxx_zh_CN.properties中不允许保存中文,用jdk/bin目录下的native2ascii.exe将中文转化为Un ...

  8. STM32——assert_param(expr)

    在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义 ...

  9. OGG for DB2 z/OS 12.2版本发布

    2016-04-15 Oracle发布了GoldenGate for DB2 z/OS  12.2.0.1.2.可以从OTN或eDelivery下载,该版本是ogg for DB2 z/OS的第一个1 ...

  10. JAVA抽象类与接口的详细解读与示例

    接口存在的原因: JAVA是单继承的,不支持多继承,但是有了接口,JAVA可以实现多个接口: 一个类要是实现某一个接口就必须实现接口内声明的所有方法(强迫执行,即便是空方法,也要实现): 接口特点: ...