【转】iOS延迟加载
来源:互联网 发布:晶振在单片机中的作用 编辑:程序博客网 时间:2024/05/21 22:56
1.延迟加载基本
延迟加载——也称为懒加载,即在需要的时候才加载(效率低,占用内存小)。所谓延迟加载,写的是其get方法.
注意:如果是延迟加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化。
2.使用延迟加载的好处:
(1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强;
(2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合。
3.代码示例
//// 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
0 0
- 【转】iOS延迟加载
- iOS延迟加载
- IOS GCD dispatch_after NSTimer 延迟加载
- 转 Hibernate延迟加载机制
- [转]Hibernate延迟加载机制
- hibernate 延迟加载(转)
- iOS学习笔记--懒加载(延迟加载)
- iOS中 数据的延迟加载(懒加载)
- IOS开发UI基础—05(延迟加载)懒加载
- IOS 开发 懒加载 (延迟加载) 的基本方式
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- 延迟加载
- js写文件
- (Orbit-stabilizer theorem) 的简单证明
- 女生的痛,男生永远不懂
- js学习小总结
- LeetCode 12 Int2Roman && 13 Roman2Int
- 【转】iOS延迟加载
- JavaScript中==和===的区别
- 英语学习-7月收获的是一份坚持
- 杭电1242 Rescue
- 《显示数字时钟》
- Sikuli之批量卸载程序
- HDU 2111--Saving HDU【贪心水题】
- 关于java日期类Date,DateFormat,SimpleDateFormat,Calendar总结
- java常用容器(集合)的总结