main.storyboard
main.storyboard
又会加载箭头所指的控制器view
里面建立的子控件view
里面的全部东西都建立完之后,就会加载plist数据顾名思义,懒就是懒惰。懒加载就是用到的时候再加载,不用就不加载,并且也只加载一次。ios
(前面已经定义好了一个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方法。内存
self.shops
,就至关于[self shops]
,这样程序一来到if判断语句,就会调用shops的get方法,也就是调用本身自己,这样就陷入了死循环。[self setShops]
,这里是能够的做者:黎明豌豆
出处:http://www.cnblogs.com/PeaZora/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此字段声明,且在文章页面明显位置给出原文连接,不然保留追究法律责任的权利get