iOS开发之懒加载
2015-12-08 16:30
204 查看
iOS开发UI篇之懒加载
注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化。
每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
1. 懒加载基本
懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化。
2. 使用懒加载的好处:
不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强每个控件的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
最后再说几句
参考
iOS开发UI篇—懒加载相关文章推荐
- [置顶] iOS 7 跳过的一个坑又掉里了 - 图片渲染模式
- iOS另一种获取soap的方法
- IOS Framework 制作教程 for xcode7 (二)
- 合并算法
- iOS获取相关参数
- ios开发笔记--判断输入的手机号和价格是否合法
- iOS开发--将gif图片转成数组
- iOS开发笔记--去掉tableview中section的headerview粘性
- 使用ios系统自带分享
- 需求 - 11 - 等待动画
- iOS开发之block(二)
- IOS:两种回调的方式实现(delegate和block)
- iOS常用的公共方法详解
- iOS计算上次日期距离现在多久的代码
- mono在ios平台的局限性
- nagios安装
- ios开发创建证书和描述文件的整个流程
- ios 里如何判断当前应用的定位服务是否可用
- iOS自动布局实现Cell和Tableview高度自适应(SDAutoLayout)
- <iOS>git-起步