swift 上的 lazy

來源:互聯網
上載者:User

標籤:

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.