ios-关于懒加载

来源:互联网 发布:p2p交易量数据分析 编辑:程序博客网 时间:2024/04/29 22:42

接触ios开发也有段时间了,这里想总结一下自己对懒加载的理解,可能也不太全面,就简单点,其实就是数据就加载一次,可以不用在viewDidload里面就行加载,因为在viewDidload中加载可能会数据加载多次,而且有的时候你没有用到数据,它也已经给你加载出来了,这样会比较耗费内存和时间。懒加载的有点其实就是让控件和对象在最需要加载的时候加载。这样可以节省内存空间,毕竟我们能让手机速度越快越号是吧。所谓懒加载其实就是推迟他的getter方法的执行。下面添出两段关于懒加载的代码。总结:不需将对象的实例化写到viewDidLoad,可以简化代码,增强代码的可读性,对象的实例化在getter方法中,降低耦合性,对系统的内存占用率会减小,懒加载用到的时候才去加载

-(NSMutableArray *)dataArr{    if(!_dataArr)    {    _dataArr=[[NSMutableArray alloc]init];    return  _dataArr;    }    return _dataArr;}//此处就是然这个数组来存储数据,我重写了它的get方法,当数组没有初始化的时候先初始化,在每次用到的时候会去加载它的数据,因为我每次用的都是它的[dataArr indexPath.row]然后我是给这个数组是有赋给他数据的,然后在每次用到的时候就会进行返回这个数组。
另外一个懒加载是从plist来获取数据
- (NSArray *)statusFrames//没有给这个数组赋值所以重写get方法{    if (_statusFrames == nil) {        NSString *fullPath = [[NSBundle mainBundle] pathForResource:@"statuses" ofType:@"plist"];        NSLog(@"%@",fullPath);        // NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil];这样的代码,来产生 file 的完全路径。        /*         那么它是什么东西呢:先看 NSBundle 类,直接继承NSObject类。         这个类的对象,代表了 app 中代码和资源的文件在文件系统里所在的位置,通俗的说,就是定位了程序使用的资源(代码,图形,音乐等数据)在文件系统里的位置,并可以动态的加载、or卸载掉可执行代码。         我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle,在 xcode 里,使用应用程序、框架、or 插件的时候,xcode 会生成对应的资源的目录包。         类方法 + (NSBundle *)mainBundle         返回一个 NSBundle类的对象,这个对象就是一个完全path,这个 path 保存的当前可执行的app路径,或者是 返回nil。app ,Build之后, 资源文件直接就复制到了根目录下,于是读取的方法,应该是这样:         NSString *earth = [[NSBundle mainBundle] pathForResource:@"Brad Cox" ofType:@"png"];                  编译之后,mainBundle的资源都是放到RootFolder下,所以,可以直接访问,不要指定内部路径。通常来说,这个 mainbundle 就是 当前的可执行app 的在根目录下的绝对路径,                  也就是:         finder根目录开始的路径+app 的name+.app 后缀。而资源就直接访问,都在 app 的包里。比如;                  /Users/dashuai/Library/Application Support/iPhone Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/tomcat.app/drink.png         */        //加载数组        NSArray *dictArray = [NSArray arrayWithContentsOfFile:fullPath];        NSMutableArray *models = [NSMutableArray arrayWithCapacity:dictArray.count];        //将dictArray里面的所有字典转成模型对象,放到新的数组中        for (NSDictionary *dict in dictArray){            // 创建模型            NJWeibo *weibo = [NJWeibo weiboWithDict:dict];//直接从字典初始化            // 根据模型数据创建frame模型            NJWeiboFrame *wbF = [[NJWeiboFrame alloc] init];            wbF.weibo = weibo;                        [models addObject:wbF];        }        self.statusFrames = [models copy];    }    return _statusFrames;}

原创粉丝点击