懒加载数据
懒加载介绍
懒加载也称为延迟加载,即在需要的时候,才加载(效率低,内存占用小)。所谓的懒加载,就是在相应的对象的get方法中对数据进行初始化。
这里需要注意:1.懒加载需要先判断数据是否已经有了,如果有了就不需要进行实例化了。
2.在get方法中,对象需要用_xxx方式来表示,否则会造成函数循环调用。
3.在外部需要使用self.xxx方法来调用对象才可以完成数据的get方法的调用,使用_xxx调用对象是不可以触发get方法的。
使用懒加载的好处:
1.不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强
2.每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
//
// ViewController.m
// 数据懒加载
//
// Created by xxx on 15/3/23.
// Copyright (c) 2015年 Apress. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UILabel *lable;
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) UIImage *image;
@property (nonatomic, strong) UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.view addSubview:self.button];
[self.view addSubview:self.lable];
[self.view addSubview:self.imageView];
}
#pragma mark 懒加载
-(UILabel*) lable{
if (_lable == nil) {
_lable = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 320, 30)];
[_lable setText:@"你好,我是戴益达"];
[_lable setBackgroundColor:[UIColor redColor]];
}
return _lable;
}
-(UIButton *) button{
if (_button == nil) {
_button = [[UIButton alloc] initWithFrame:CGRectMake(0, 50, 100, 100)];
[_button setTitle:@"点击按钮" forState:UIControlStateNormal];
[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
}
return _button;
}
-(UIImage *) image{
if (_image == nil) {
_image = [UIImage imageNamed:@"picture"];
}
return _image;
}
-(UIImageView *) imageView{
if (_imageView == nil) {
_imageView = [[UIImageView alloc] initWithImage:self.image];
[_imageView setFrame:CGRectMake(0, 200, 100, 100)];
CGSize size = [UIScreen mainScreen].bounds.size;
[_imageView setCenter:CGPointMake(size.width/2, size.height/2)];
}
return _imageView;
}
#pragma mark detail method
-(void)click:(UIButton *)Button{
NSLog(@"已经点击按钮");
}
@end