iOS开发UI篇—懒加载

1.懒加载基本

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

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

2.使用懒加载的好处:

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

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

3.代码示例

  8 9 #import "YYViewController.h"10 11 #define POTOIMGW    20012 #define POTOIMGH    30013 #define POTOIMGX    6014 #define  POTOIMGY    5015 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 @end27 28 29 30 @implementation YYViewController31 32 - (void)viewDidLoad33 {34     [super viewDidLoad];35     [self change];36 }37 38 -(void)change39 {40     [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];41     //先get再set42     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 *)firstlab53 {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 *)icon65 {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 *)lastlab78 {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 *)leftbtn90 {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/crash-wu/p/4806440.html

iOS开发UI篇—懒加载相关推荐

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

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

  2. iOS开发UI篇—懒载入

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

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

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

  4. ios开发多线程篇--异步加载网络图片GCD

    一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...

  5. iOS开发UI篇-在UItableview中实现加载更多功能

    iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...

  6. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  7. iOS开发UI篇—实现UITableview控件数据刷新

    iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  8. iOS开发UI篇—UITableviewcell的性能优化和缓存机制

    iOS开发UI篇-UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...

  9. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇-UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 1 #import <Foundation/Foundation.h&g ...

最新文章

  1. 【MAC】记mac中django-admin.py 调用失败的解决方案
  2. Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
  3. Tool:微信使用技巧之手把手教你如何在电脑端同时登录多个微信账号之图文教程详细攻略
  4. Hibernate之N+1问题
  5. Java中9种IO的读取方式
  6. 力展物流公司上云 低成本、实例资源使用效率提升
  7. 可信赖的服务器监控系统,可信赖的网络监控系统,源于专业和专注.PDF
  8. 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)
  9. 海康相机回调方式理一下
  10. 系统学习机器学习之随机场(一)--HMM
  11. 【python】将json字符串转化为json对象
  12. 澳门智能公交调度系统客户端GUI设计
  13. Hive窗口函数经典案例(保姆级案例)
  14. 随机微分方程学习笔记04 Ito公式
  15. java web 教学视频_超全面的JavaWeb视频教程
  16. matlab画图时候图例混乱解决方法
  17. 怎么卸载apowerrec_怎么卸载win10自带应用 工具
  18. Windows安全基础-基线配置
  19. matlab-simulink-simscape的直流电动机模型仿真
  20. 【docker】docker容器端口如何暴漏出来?

热门文章

  1. 三维空间长度温度数量_罗斯蒙特644温度变送器怎样接线?
  2. python下拉菜单_python-web自动化:下拉列表操作
  3. python123数字形式转换_python基本数据类型的使用、转换----数字(有待完善)
  4. linux sockaddr_in头文件,linux网络编程常用头文件
  5. mysql innodb文件_MySQL文件和Innodb引擎文件
  6. 2021年春季学期-信号与系统-第六次作业参考答案-第五小题
  7. 龙邱树莓派Raspberry Pi 扩展板电路及其相关实验
  8. 第十六届智能车竞赛MCU这么多,该怎么办?别慌,RT-Thread来帮忙。
  9. 第十五届全国大学生智能车全国总决赛获奖信息-华北赛区
  10. python底层代码里面的参数_梯度下降算法讲解及python底层实现