iOS设计模式之懒加载

一.为什么要懒加载?

答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存。这些资源例如大量的数据,图片,音频,过多的控件等。

二.懒加载思想是什么?

答: 简单的将就是拖到最后一刻,万不得已了,才加载,才开始占用资源。所谓懒加载,写的就是其getter方法。在开发中,当程序中需要利用的资源时,在程序启动的时候不加载,只有在运行当需要这些资源的时候再去加载这些资源。

三: 懒加载的好处

答: 1.不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强。

2.每个属性的getter方法中分别负责各自的实例化处理,代码彼此间的独立性更强。

3.只有当真正需要资源的时候,再去加载,节省了内存资源。

四:步骤:

1.在 @interface 里声明需要属性。比如我需要两个控件label和textfield

@interface ViewController ()

@property (nonatomic,strong) UILabel * titleLabel;

@property (nonatomic,strong) UITextField *textField;

@end

2.重写声明属性的getter方法(切记不要自己手动写,Xcode会自动提示出来,写出就费了)

#pragma mark 重写titleLabel的getter方法
      - (UILabel *)titleLabel
      {

if (!_titleLabel)

{

self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 100, 40)];

self.titleLabel.textAlignment = NSTextAlignmentCenter;

self.titleLabel.textColor = [UIColor blackColor];

self.titleLabel.text = @"呵呵";

[self.titleLabel sizeToFit];

}

return _titleLabel;

}

3.调用重写的方法  self.方法名

//在viewDidLoad里面调用initUI方法。

- (void)initUI

{

//只是加载到预想加载的view上。不在初始化方法里为其alloc/init。只是一个指针,不会占内存。

[self.view addSubview:self.titleLabel];

[self.view addSubview:self.textField];

}

五.注意的问题:

1.指针循环引用问题

if (!_titleLabel)不可以写成 if (!self.titleLabel),不然就会形成循环引用指针。

return _titleLabel;不可以写成 return self.titleLabel;不然会形成循环引用。

六.上代码

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) UILabel * titleLabel;
@property (nonatomic,strong) UITextField *textField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self initUI];
}

- (void)initUI
{
    //只是加载到预想加载的view上。不在初始化方法里为其alloc/init。只是一个指针,不会占内存。

    [self.view addSubview:self.titleLabel];

    [self.view addSubview:self.textField];
}

#pragma mark 重写titleLabel的getter方法
- (UILabel *)titleLabel
{

    if (!_titleLabel) {

        self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 100, 40)];
        self.titleLabel.textAlignment = NSTextAlignmentCenter;
        self.titleLabel.text = @"你瞅啥";
        self.titleLabel.textColor = [UIColor blackColor];
        [self.titleLabel sizeToFit];
    }

    return _titleLabel;
}
#pragma mark 重写的textField的getter方法
- (UITextField *)textField
{
    if (!_textField) {
        self.textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 100, 40)];
        self.textField.borderStyle = UITextBorderStyleRoundedRect;
        self.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
        self.textField.placeholder = @"瞅你咋滴";
    }
    return _textField;
}
@end

时间: 2024-08-03 06:22:27

iOS设计模式之懒加载的相关文章

iOS UITableview 图片懒加载demo

1.https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html 这是苹果的官方demo,用itunes的应用列表为例,讲述了图片lazy load的思想. 主要思想是,当UITableView处于停止状态时,查找当前视图中的cell,并开始下载icon,下载完成后加载到页面上. 2.可以直接使用第三方加载网络图片的库,SDWebImage,https://github.com

iOS中的懒加载

iOS开发中 我们经常使用懒加载 1.懒加载的好处,让控件和对象在最需要加载的时候加载.这样可以节省内存空间,因为我们移动的设备资源还是比较宝贵的.所谓懒加载 就是推迟他的getter方法的执行. 比如.一个view的子控件 ,只有当这个view被显示的时候才去加载.一个tableViewCell中,给他设置了图片,他的content View里面才包含imageView的图片,只有设置了textLabel的内容,才会加载这个textLabel. //collectionView的数据源--属性

iOS基础之懒加载

什么是懒加载,即延迟加载,在你需要的时候才加载,也就是说在不需要的时候是不会加载的,减小了占用内存.当然在使用懒加载的时候要注意先加一个判断去判断有无. 为什么要使用懒加载呢?除了上述说的能够减小占用内存,还有就是不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强,每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合. 代码演示: #import "RootViewController.h" @interface RootView

iOS开发中懒加载的使用和限制

1.在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生. 2.下边用代码解释: 1 - (NSMutableArray *)newsArr{ 2 if (!_newsArr) { 3 self.newsArr = [NSMutableArray array];//1 4 5 // 2. _newsArr = [[NSMutableArray alloc]init]; 6 7 // 3. _newsArr = [NSMutableArray array]; 8

iOS开发之——懒加载

★懒加载即延时加载,即当对象需要用到的时候再去加载.其实就是重写对象的get方法,当系统或者开发者调用对象的get方法时,再去加载对象. ★注意: 1. 如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化            2. 在getter方法里切勿使用self.自己,因为self.自己会调用getter方法,造成死循环 ★使用懒加载的好处: 1. 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强            2. 每个控件的g

java 设计模式-单例模式-懒加载

首先推荐种最好的单例模式实现方式(没有之一) public class Manager { private Manager() {            }        public static Manager getInstance() {        return ManagerHolder.instance;    }        private static class ManagerHolder {        private static final Manager ins

IOS数据懒加载

懒加载,又称为延迟加载.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源. 我们知道iOS设备的内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么就有可能会耗尽iOS设备的内存.这些资源例如大量数据,图片,音频等等 下面举个例子: 1> 定义控件属性,注意:属性必须是strong的,示例代码如下: @property (nonatomic, strong) NSArray *imageList; 2>

【IOS学习基础】weak和strong、懒加载、循环引用

一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成引用计数加1:而strong则相当于OC中规定retain,它会造成引用计数加1”. ARC的原理:只要还有一个变量指向对象,对象就会保持在内存中.当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放.这条规则对于实例变量.synthesize属性.局部变量都是适用的 strong指针能够保

iOS开发UI篇—懒加载

iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 2.使用懒加载的好处: (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 3.代码示例 1 // 2 // YYViewController.m 3