zoukankan      html  css  js  c++  java
  • swift 上的 lazy

    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")

     

     

     

  • 相关阅读:
    Linux 系统挂载数据盘
    Apache Rewrite规则笔记
    linux fdisk分区笔记
    阿里云linux配置
    linux 下安装mysql相关笔记
    ShopNC目录结构分析
    今天开始出发做ShopNC
    svn相关笔记
    linux学习笔记-不定时更新
    Oracle EBS Java Applet报错:找不到类
  • 原文地址:https://www.cnblogs.com/Ohero/p/4631646.html
Copyright © 2011-2022 走看看