iOS开发UI篇—懒载入

iOS开发UI篇—懒载入

1.懒载入基本

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

注意:假设是懒载入的话则一定要注意先推断是否已经有了。假设没有那么再去进行实例化

2.使用懒载入的优点:

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

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

3.代码演示样例


 1 //
 2 // YYViewController.m  3 // 03-图片浏览器初步  4 //
 5 // Created by apple on 14-5-21.  6 // Copyright (c) 2014年 itcase. All rights reserved.  7 //  8 
 9 #import "YYViewController.h"
 10 
 11 #define POTOIMGW    200
 12 #define POTOIMGH    300
 13 #define POTOIMGX    60
 14 #define  POTOIMGY    50
 15 
 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 @end
 27 
 28 
 29 
 30 @implementation YYViewController  31 
 32 - (void)viewDidLoad  33 {  34  [super viewDidLoad];  35  [self change];  36 }  37 
 38 -(void)change  39 {  40     [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];  41     //先get再set
 42     
 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 *)firstlab  53 {  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 *)icon  65 {  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 *)lastlab  78 {  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 *)leftbtn  90 {  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