博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UI篇—懒加载
阅读量:5256 次
发布时间:2019-06-14

本文共 3823 字,大约阅读时间需要 12 分钟。

1.懒加载基本

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

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

2.使用懒加载的好处:

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

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

3.手码懒加载创建控件的步骤

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

@property (nonatomic, strong) UIImageView *icon;

2> 在属性的getter方法中实现懒加载。

4.代码示例

////  YYViewController.m//  03-图片浏览器初步////  Created by apple on 14-5-21.//  Copyright (c) 2014年 itcase. All rights reserved.//#import "YYViewController.h"#define POTOIMGW    200#define POTOIMGH    300#define POTOIMGX    60#define  POTOIMGY    50@interface YYViewController ()@property(nonatomic,strong)UILabel *firstlab;@property(nonatomic,strong)UILabel *lastlab;@property(nonatomic,strong)UIImageView *icon;@property(nonatomic,strong)UIButton *leftbtn;@property(nonatomic,strong)UIButton *rightbtn;@property(nonatomic,strong)NSArray *array;@property(nonatomic ,assign)int i;-(void)change;@end@implementation YYViewController- (void)viewDidLoad{    [super viewDidLoad];    [self change];}-(void)change{    [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];    //先get再set    self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];    self.lastlab.text=self.array[self.i][@"desc"];    self.leftbtn.enabled=(self.i!=0);    self.rightbtn.enabled=(self.i!=4);}//延迟加载/**1.图片的序号标签*/-(UILabel *)firstlab{    //判断是否已经有了,若没有,则进行实例化    if (!_firstlab) {        _firstlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];        [_firstlab setTextAlignment:NSTextAlignmentCenter];        [self.view addSubview:_firstlab];    }    return _firstlab;}/**2.图片控件的延迟加载*/-(UIImageView *)icon{     //判断是否已经有了,若没有,则进行实例化    if (!_icon) {        _icon=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];        UIImage *image=[UIImage imageNamed:@"biaoqingdi"];        _icon.image=image;        [self.view addSubview:_icon];    }    return _icon;}/**3.描述控件的延迟加载*/-(UILabel *)lastlab{     //判断是否已经有了,若没有,则进行实例化    if (!_lastlab) {        _lastlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];        [_lastlab setTextAlignment:NSTextAlignmentCenter];        [self.view addSubview:_lastlab];    }    return _lastlab;}/**4.左键按钮的延迟加载*/-(UIButton *)leftbtn{     //判断是否已经有了,若没有,则进行实例化    if (!_leftbtn) {        _leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];        _leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);        [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];        [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];        [self.view addSubview:_leftbtn];        [_leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];    }    return _leftbtn;}/**5.右键按钮的延迟加载*/-(UIButton *)rightbtn{    if (!_rightbtn) {        _rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];        _rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);        [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];        [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];        [self.view addSubview:_rightbtn];        [_rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];    }    return _rightbtn;}//array的get方法-(NSArray *)array{    if (_array==nil) {        NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];        _array=[[NSArray alloc]initWithContentsOfFile:path];    }    return _array;}-(void)rightclick:(UIButton *)btn{    self.i++;    [self change];}-(void)leftclick:(UIButton *)btn{    self.i--;    [self change];}@end

转载于:https://www.cnblogs.com/H7N9/p/4888841.html

你可能感兴趣的文章
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>