IOS数据懒加载

  懒加载,又称为延迟加载。说的通俗一点,就是在开发中,当程序中需要利用的资源时。在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源。

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

下面举个例子:

1> 定义控件属性,注意:属性必须是strong的,示例代码如下:

@property (nonatomic, strong) NSArray *imageList;

2> 在属性的getter方法中实现懒加载,示例代码如下:

// 懒加载-在需要的时候,在实例化加载到内存中
- (NSArray *)imageList
{
    // 只有第一次调用getter方法时,为空,此时实例化并建立数组
    if (_imageList == nil) {
        // File表示从文件的完整路径加载文件
        NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];
        NSLog(@"%@", path);

        _imageList = [NSArray arrayWithContentsOfFile:path];
    }

    return _imageList;
}

如上面的代码,有一个_imageList属性,如果在程序的代码中,有多次访问_imageList属性,例如下面

self.imageList ;

self.imageList ;

self.imageList ;

虽然访问了3次_imageList 属性,但是当第一次访问了imageList属相,imageList数组就不为空,
当第二次访问imageList 时  imageList != nil;程序就不会执行下面的代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];
        NSLog(@"%@", path);

        _imageList = [NSArray arrayWithContentsOfFile:path];

就不会再次在PList文件中加载数据了。

懒加载的好处:

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

2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

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

提醒:这是苹果公司提倡的做法。其实苹果公司做的IOS系统中很多地方都用到了懒加载的方式,比如控制器的View的创建。

原文地址:http://www.bkjia.com/IOSjc/780740.html

时间: 2024-08-06 20:08:09

IOS数据懒加载的相关文章

smartjs - DataManager 场景示例分析 - 数据懒加载

发一张policy的参数图设置图: 场景1 - 数据的懒加载/延迟加载 在很多时候,为了提高网页的加载速度,减少不必要的开销,会将页面的数据拆分成几个部分,首先加载呈现可视区域内的数据,然后剩下来的会在需要的时候在进行加载. 而这种按需加载的数据又分为两种: 1.按照需要进行加载:可以是由某个动作触发来引起,比如:tab,查看更多等: 2.采用缓存的方式:对后续动作的预知,提前将后续的数据加载进来,放入到缓存中:等需要的时候能提供快速的响应:比如:很多igrid的滚动分页 那么来看一下在data

安卓中实现界面数据懒加载

大家在使用手机新闻客户端的时候就会有一个发现,大多数的新闻客户端都会把新闻分类,诸如头条.娱乐.体育.科技等等,如何实现这种界面的呢?这个实现起来其实很简单,就是在一个Fragment中实现多个ViewPage的切换,再在ViewPage的上面放一个TabLayout,关联起来就可以实现联动效果.如果大家感觉不太明了的话,以后我可以专门写一篇关于Fragment中放入多个ViewPage的博客,今天,我主要介绍的是怎样实现界面即Fragment的懒加载.那么,大家就会奇怪了既然是加载界面直接加载

iOS 之懒加载

今天很坑爹,做界面的时候,tableview 明显做了复用了,数组也做了懒加载了,获取数据前也把数组给清空了,但是每次获取数据刷新表格的时候,数据确重复覆盖了(重复创建),后来给 cell 加了个白色的背景图片后还是不行,无奈,只好另想他法,想获取数据时直接弹出来一个 view 直接覆盖原来的 tableview ,但这样做来用户的体验度确不高,无奈,再次选择放弃,对了,之前有试过在获取数据前有想过把 [tableview removeFromSuperview];(删除)的,但是效果还是不行,

iOS—UI —懒加载

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

iOS中懒加载

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

数据懒加载

1.判断数据集是否为空,如果为空加载数据,否则不需要加载数据. -(NSArray *)roles { if (_roles == nil) { //获取数据文件 NSString *path = [[NSBundle mainBundle]pathForResource:@"heros.plist" ofType:nil]; NSArray *array = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *mutable

Android - Fragment正确使用方法介绍,setUserVisibleHint方法实现数据懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里. import android.support.v4.app.Fr

小程序云开发数据懒加载

一些页面需要的数据可能更多一些,诸如动态页面,新闻页面等.一次加载太多数据对于用户而言是极为不好的体验. db.collection("dynamic").orderBy("createTime", "desc").skip(pages).limit(5).get().then().catch() pages为起点,limit里面的5则为每次调取几条数据.因此可以在 onReachBottom里面进行调用,首先在page()外面let 声明pag

VUE 实现监听滚动事件,实现数据懒加载

methods: { // 获取滚动条当前的位置 getScrollTop() { let scrollTop = 0 if (document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.scrollTop } else if (document.body) { scrollTop = document.body.scrollTop } retu