懒加载

为何要用懒加载

1.首先看一下程序启动过程:(如图)

  • 会有一个mian的设置,程序一启动会加载main.storyboard
  • main.storyboard又会加载箭头所指的控制器
  • 控制器一旦加载,就会加载view里面建立的子控件
  • 直到view里面的全部东西都建立完之后,就会加载plist数据

2.为何要用懒加载

  • 程序一启动,数据就会加载完成,但有时可能数据较大,并且数据加载完成后,用户颇有可能会很长时间用不到这些数据,这样会使得程序一启动,就会占用很大的内存,很浪费。所以,咱们通常会选用懒加载对数据进行加载。

什么是懒加载

顾名思义,懒就是懒惰。懒加载就是用到的时候再加载,不用就不加载,并且也只加载一次。ios

懒加载的思路

懒加载其实就是重写get方法

(前面已经定义好了一个NSArrary数组,数组名为shops)数组

-(NSArrary *)shops {
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
    _shops = [NSArray arrayWithContentsOfFile:file];
    return _shops;
}

若是就这么写的话,会出现一个问题,就是下面的代码中每调用一次都会从新加载一次,而咱们想要实现的是文件只加载一次,所以要在前面加一个判断,在每次调用的时候判断数据是否为空,若是不为空,就不须要加载,直接用就能够了code

-(NSArrary *)shops {
    if(_shops == nil) {
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
        _shops = [NSArray arrayWithContentsOfFile:file];
    }
    return _shops;
}

使用懒加载的好处

在ios六、7那会,会有一个-(void) viewDidUnload;方法,当内存发生不足警告的时候,系统会自动调用该方法,将一些不经常使用的控制器删掉,同时会将plist文件销毁,以释放内存空间。若是不用懒加载,那么当再次出发该控制器时,便再也找不到数据了,程序就无法运行。而用了懒加载后,能够保证不管何时内存被清掉,但只要想用,就能从新加载出数据。blog

注意点

上面代码中出现了三个_shops,那么这三处能不能换成self.shops呢?咱们知道_shops是直接访问成员变量,而self.shops是调用shops的getter\setter方法。内存

  • 第一处:从代码中能够看出,第一处的_shops显然是拿出它的值与nil进行比较,既然是拿出值,就应该是调用get方法,若是改为self.shops,就至关于[self shops],这样程序一来到if判断语句,就会调用shops的get方法,也就是调用本身自己,这样就陷入了死循环。
  • 第三处:同理,return语句就是取出值进行返回,既然是取出,就是调用get方法,这样也会陷入死循环。
  • 第二处:从代码看,是将后面的值赋给_shops,既然是赋值,那就是调用set方法,所以若是将这里的_shops换成self.shops的话,是至关于[self setShops],这里是能够的
所以在使用self的时候,必定要当心是调用get仍是set方法,以避免陷入死循环。

做者:黎明豌豆
出处:http://www.cnblogs.com/PeaZora/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此字段声明,且在文章页面明显位置给出原文连接,不然保留追究法律责任的权利get

相关文章
相关标签/搜索