码迷,mamicode.com
首页 > 编程语言 > 详细

swift 上的 lazy

时间:2015-07-09 00:33:49      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

lazy顾名思义就是慢吞吞的,万非得一就不动。

那么一个变量也是如此,只有你第一次使用的时候才进去加载。所有又称为延迟加载,需要的时候才加载。

=========

这样做的好处:

1. 模块化,把对象的代码都写在了get方法中,代码的可读性更强。

2. 占用内存小【在某些情况下,不一定该对象一定要创建】,按需加载

 

=======

如何体现?

1.oc:

- (UITableView *)tableView{

  if(!_tableView){

    _tableView = [[UITableView alloc] init];

  }

  return _tableView;

}// 只有第一次调用self.tableView的时候会_tableView才会被创建

2.swift:

  2.1 简单的表达式:lazy var dataArr = Array<Product>()

  2.2 闭包:lazy var titleStr:String = {return "title"}()

============

使用的例子:

1. 需要对属性进一步加工才能使用

class LazyDemo {

    var url:String

    lazy var requestUrl:String = {

        [unowned self] in

        if self.url.hasPrefix("http://"){

            return self.url

        }else{

            return "http://".stringByAppendingString(self.url)

        }

    }()

    init(url:String){

        self.url = url

    }

}

2. 需要复杂计算

lazy var second:Int = {

        var sum = 0

        for i in 1...100000{

            sum += i

        }

        return sum

        }()

3. 属性不确定是否会被使用:例子来源官网

class DataImporter {

    /*

    DataImporter is a class to import data from an external file.

    The class is assumed to take a non-trivial amount of time to initialize.

    */

    var fileName = "data.txt"

    // the DataImporter class would provide data importing functionality here

}

 class DataManager {

    lazy var importer = DataImporter()

    var data = [String]()

    // the DataManager class would provide data management functionality here

}

 let manager = DataManager()

manager.data.append("Some data")  // 这个时候才初始化 importer

manager.data.append("Some more data")

 

 

 

swift 上的 lazy

标签:

原文地址:http://www.cnblogs.com/Ohero/p/4631646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!