zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【Language】 TIOBE Programming Community Index for February 2013
    【diary】good health, good code
    【web】a little bug of cnblog
    【Git】git bush 常用命令
    【web】Baidu zone ,let the world know you
    【diary】help others ,help yourself ,coding is happiness
    【Git】Chinese messy code in widows git log
    【windows】add some font into computer
    SqlServer启动参数配置
    关于sqlserver中xml数据的操作
  • 原文地址:https://www.cnblogs.com/187n/p/5071592.html
Copyright © 2011-2022 走看看