IOS懒加载
1.懒加载基本
懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.
注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化
2.使用懒加载的好处:
(1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强
(2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
3.代码示例

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

IOS懒加载的更多相关文章
- iOS 懒加载模式
感谢: chengfang iOS开发-懒加载 1.懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否 ...
- ios 懒加载详解
iOS开发之懒加载 在iOS开发中几乎经常用到懒加载技术,比如我们存放网络数据的数组,控制器的view,控件的自定义,复杂的运算逻辑等等情况下都会用到懒加载技术,那么什么是懒加载呢?? 他又有什么样的 ...
- iOS 懒加载不起作用的原因
在.m类中定义了一共strong属性,用懒加载getter方式去处理,发现用的时候无论如何属性都是null,调试后,发现根本没进getter方法. (ps:懒加载,又称为延迟加载.说的通俗一点,就是在 ...
- iOS - (懒加载)
今天很坑爹,做界面的时候,tableview 明显做了复用了,数组也做了懒加载了,获取数据前也把数组给清空了,但是每次获取数据刷新表格的时候,数据确重复覆盖了(重复创建),后来给 cell 加了个白色 ...
- iOS 懒加载 字典转模型
>>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行 ...
- iOS之weak和strong、懒加载及循环引用
一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...
- iOS开发UI篇—懒加载
iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...
- iOS开发UI中懒加载的使用方法
1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...
- [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例
懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...
随机推荐
- Git ——分布式版本控制系统
Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...
- 转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程
一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包.这 ...
- JavaScript 继承
许多OO语言都支持两种继承方式,接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.由于在ECMAScript中,函数没有签名,无法实现接口继承,只支持实现继承,而且其实现继承主要 ...
- 一款新的PYTHON数据科学利器:yhat
偶然看文章发现的一个新的python IDE,外表很清新,也很新颖. https://www.yhat.com/products/rodeo 看图说话,软件的布局确实很新颖,和Notebook类似,也 ...
- <![CDATA[]]>作用
<![CDATA[]]>的作用是让XML解析器将标签中的字符串当作普通文本对待,以防止某些字符串对XML格式造成破坏.
- 【转】 linux 下Time_wait过多问题解决
问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放.看了一下18888,当时吓到了. 现象: 1.外部机器不能正常连接S ...
- Spring 国际化
http://www.xdemo.org/spring-i18n/ xxxx_zh_CN.properties中不允许保存中文,用jdk/bin目录下的native2ascii.exe将中文转化为Un ...
- STM32——assert_param(expr)
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义 ...
- 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 ...
- JAVA抽象类与接口的详细解读与示例
接口存在的原因: JAVA是单继承的,不支持多继承,但是有了接口,JAVA可以实现多个接口: 一个类要是实现某一个接口就必须实现接口内声明的所有方法(强迫执行,即便是空方法,也要实现): 接口特点: ...