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

相关文章