zoukankan      html  css  js  c++  java
  • iOS开发UI篇—懒加载

    .懒加载基本

    懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其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 
  • 相关阅读:
    什么是面向对象(OOP)
    Java虚拟机(JVM)你只要看这一篇就够了!
    ES6中新增的Object.assign()方法详解
    微信小程序_专题_脚本之家(小程序全部知识点)
    微信小程序 生命周期详解
    vue 阻止事件冒泡,捕获方法
    Java必备常见单词
    JS夸页面通信极简方案&纯前端实现文件下载
    vue keep-alive以及activated,deactivated生命周期的用法
    JVM实用参数 内存调优
  • 原文地址:https://www.cnblogs.com/henusyj-1314/p/8576377.html
Copyright © 2011-2022 走看看