iOS开发UI篇—懒载入

iOS开发UI篇—懒载入

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

转载于:https://www.cnblogs.com/brucemengbm/p/6791839.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之虚拟环境

Virtualenv(虚拟环境) VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响.这样有很多优点,宝宝们要记住哦,比如: 在没有权限的情况下安装新套件 不同应用可以使用不同的套件版本 套件升级不影响其他应用 …

【解决】subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-zero exit status 127

pip list 报错 Traceback (most recent call last):File "/home/sensetime/.pyenv/versions/3.6.5/bin/pip", line 11, in <module>sys.exit(main())File "/home/sensetime/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pip/_internal/cli/main.p…

输出四位完全平方数_完全平方数中的规律

PS&#xff1a;很近之前自己收集的资料一个正整数如果是另一个整数的完全平方&#xff0c;那么我们就称这个数为完全平方数&#xff0c;也叫做平方数。如&#xff1a;0&#xff0c;1&#xff0c;4&#xff0c;9&#xff0c;16&#xff0c;25&#xff0c;36&#xff0c;49&#…

RTP格式图 NNEXB格式和RTP格式

Dove(12337127) 10:15:45我看JM代码里面有些疑问 看好多地方都出现了ANNEXB 时空互换(178316135) 10:16:08h264的2种码流编码格式Dove(12337127) 10:16:19我就不太理解是什么意思 刚才翻标准看见了 刚准备认真看看 Dove(12337127) 10:16:29annexb rtp 是么&#x…

第一阶段冲刺第二天

昨天把以前写过的Java普通用户类和订单类看了看&#xff0c;添加了一些变量 看了一些其他网页的代码 今天继续写关于收藏部分的代码 遇到的困难&#xff1a;还是没有什么头绪&#xff0c;做不到真正的实现转载于:https://www.cnblogs.com/lzxw/p/6800311.html

为企业提供本地销售人员的Universal Avenue获1000万美元A轮融资

为各类B2B企业提供本地销售人员的瑞典初创企业Universal Avenue近日获得了1000万美元的A轮融资。此轮融资由Eight Roads&#xff08;富达国际的投资机构&#xff09;领投&#xff0c;原有投资者Northzone和MOOR跟投&#xff0c;加上2015年获得的500万美元种子轮融资&#xff0c…

Python02期预科课程笔记索引

Python index day01 Python简介 Python发展历程 Python安装以及版本检测PyCharm的安装和破解 day02 Python注释及语句分类 Python命令方式和关键字Python中的变量Python的数据类型PyCharm中的快捷键 day03 Python数据类型转换Python中的运算和运算符Python流程控制 day0…

【Linux分享】Linux常用命令+教程分享

今天分享分为两部分 :) PART01 Linux常用命令分享/ PART02 关于BD面试经验分享 30mins Linux Command: PART 1 你本可以张口就来..... 本篇内容分享的宗旨: 拿下Linux面试 别面试的时候呆呆地说个ls了&#x1f691; 本篇分享详细地介绍了常用Linux指令的功能、语法、参…

万能无线鼠标对码软件_400元就能买ROG无线游戏鼠标,ROG影刃2无线版使用体验...

影刃2是ROG刚刚推出的一款新产品&#xff0c;定位入门游戏玩家。目前市面上定位入门游戏玩家的无线鼠标真不多&#xff0c;400块以内的预算想要选购一款合适的无线游戏鼠标&#xff0c;选择其实非常有限。 就ROG产品线而言&#xff0c;烈刃2的价格到了700块钱&#xff1b;罗技G…

[转帖]H.264 RTP payload 格式(有效载荷)

1. 网络抽象层单元类型 (NALU)NALU 头由一个字节组成, 它的语法如下:---------------|0|1|2|3|4|5|6|7|--------|F|NRI| Type |---------------F: 1 个比特.forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.NRI: 2 个比特.nal_ref_idc. 取 00 ~ 11, 似乎指示这个 NAL…

wampserver 虚拟主机

转载&#xff1a;http://blog.csdn.net/knight_quan/article/details/51830683 1.背景&#xff1a; 在进行网站开发的时候&#xff0c;通常需要以http://localhost或者127.0.0.1等地址来访问本地环境的网站。不过随着开发项目的增多&#xff0c;需要每次先访问localhost然后再选…

PL/SQL的结构

2019独角兽企业重金招聘Python工程师标准>>> [DECLARE] --声明开始关键字/*这里是声明部分,包括PL/SQL中的变量、常量以及类型第等*/BEGIN --执行部分开始标志/*这里是执行部分,是整个PL/SQL块的主体部分,该部分必须存在,可以是SQL语句或流程控制语句等…

cf方框透视易语言代码怎么写_易语言真的那么不入流吗?

很多人鄙视易语言&#xff0c;为什么那么多人一提易语言&#xff0c;除了骂&#xff0c;还是骂&#xff0c;易语言很大错误吗&#xff1f;知乎上的大神们是这么说的一个语言的“入流”&#xff0c;和是不是英文关键字无关&#xff0c;而是和这种语言进入某一子行业的契机有关。…

python发展历程

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Python是我喜欢的语言&#xff0c;简洁&#xff0c;优美&#xff0c;容易使用。前两天&#xff0c;我很激昂的向朋友宣传Python的好处。 听过之…

【Django】RBAC权限管理系统模块-理解

今天文章分为两部分 :) PART1 RBAC权限管理内容分享/ PART2 关于字节跳动一面 10 Minutes Django-RBAC: PART 1 这权限管理系统主要功能是什么&#xff1f; 顾名思义&#xff0c;在系统中可以灵活的划分角色组&#xff0c;可以根据功能特性来划分&#xff1a;- 比如设置系…

NAL的基本特征

为了保证视频流在不同传输环境中能有效地传输&#xff0c;单纯的高压缩率是不够的&#xff0c;必须提供有效的方法&#xff0c;使视频流能够与传输协议无缝连接&#xff0c;才能应用到各种网络。在以前的标准中&#xff0c;MPEG标准包含系统层&#xff0c;同时制定了H&#xff…

Linux使用circos

1.在conda中安装bioconda conda install -c bioconda circos -y # 测试是否所有的module都安装好了 circos -module # 所有都显示OK则成功 ok 0.39 Font::TTF::Font ok 2.68 GD ok 0.2 GD::Polyline ... .... 2.检查模块是否齐全 circos -module 3.下…

下一步工作的一些思考和问题

前期PL和PS部分基本开发完成了&#xff0c;现在开始做界面交互集成的工作&#xff0c;总结一些思考和问题。 1&#xff0c;关于software cpu的计算时间&#xff0c;可能会比现在长。前期实验时是裸跑程序&#xff0c;加入操作系统时&#xff0c;由于系统的多任务&#xff0c;PS…

python numpy教程_Python中的Numpy入门教程

这篇文章主要介绍了 Python 中的 Numpy 入门教程&#xff0c;着重讲解了矩阵中的数组操作 , 需要的 朋友可以参考下 1 、 Numpy 是什么 很简单&#xff0c; Numpy 是 Python 的一个科学计算的库&#xff0c; 提供了矩阵运算的功能&#xff0c; 其一般与 Scipy 、 matplotlib 一…

jquery中的 jquery.contains(a,b)

jquery.contains(a,b) 判断元素 a中是否包含 b 元素: 源码: contains isNative(docElem.contains) || docElem.compareDocumentPosition ?function( a, b ) {var adown a.nodeType 9 ? a.documentElement : a,bup b && b.parentNode;return a bup || !!( bup &a…