【转】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
原创粉丝点击