美文网首页
lazy修饰符和lazy方法

lazy修饰符和lazy方法

作者: TomatosX | 来源:发表于2017-07-25 11:14 被阅读11次

我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访问,那么就进行初始化并存储后再返回。这样我们可以把这个属性的初始化时刻推迟,与包含它的对象的初始化时刻分开,以达到提升性能的目的。

对于一个属性是由复杂计算得到值得话,我们可以声明一个lazy属性的方法。

class ClassLazy {
    
    lazy var str: String = {
        let str = "Hello"
        print("只在首次访问输出")
        return str
    }()
}

如果只是一个简单的赋值,我们直接声明一个属性即可。

lazy var str1 = "Hello Str1"

另外,lazy也可以用在集合中。
如下我们有两个迭代。

let data = 1...3
let dataResult = data.map { (i: Int) -> Int in
    print("正在处理\(i)")
    return i * 2
}
print("准备访问结果")
for i in dataResult {
    print("操作后结果为\(i)")
}
print("操作完毕")

输出结果:
正在处理1
正在处理2
正在处理3
准备访问结果
操作后结果为2
操作后结果为4
操作后结果为6
操作完毕

如果循环不需要完全执行,可能存在提前退出的话,我们可以在map的前面加一个lazy修饰来进行性能优化效果会非常明显:

let data = 1...3
let dataResult = data.lazy.map { (i: Int) -> Int in
    print("正在处理\(i)")
    return i * 2
}
print("准备访问结果")
for i in dataResult {
    print("操作后结果为\(i)")
}
print("操作完毕")

输出结果:
准备访问结果
正在处理1
操作后结果为2
正在处理2
操作后结果为4
正在处理3
操作后结果为6
操作完毕

相关文章

  • lazy修饰符和lazy方法

    我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访问,那...

  • lazy修饰符和lazy方法

    swift属性的延迟加载你一定不陌生 lazy var str:String = "Hello" 而我们今天关注的...

  • lazy 修饰符和 lazy 方法

    延时加载或者说延时初始化时很常用的优化方法。 在特定环境下才会使用到的存储属性,可以使用 lazy class C...

  • Swift中的属性

    1、属性访问控制2、属性观察3、KVO4、lazy修饰符和lazy方法 1、属性访问控制 对于方法来说比较直接,我...

  • Swift - LAZY 修饰符和 LAZY 方法

    延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些...

  • [Swift开发者必备Tips] 单例 | log输出|la

    单例 Log 输出 lazy 修饰符和 lazy 方法 单例 单例是一个在 Cocoa 中很常用的模式了。对于一些...

  • [Vue]基础指令

    v-model .lazy.lazy修饰符,焦点离开文本框发生变化 .trim去空格 .number Vue.di...

  • vue 修饰符

    v-model 修饰符 .lazy.number.trim .sync 修饰符 .native修饰符 事件修饰符 ...

  • Kotlin 使用Perference

    实例: 模板类 委托属性/委托代理 lazy修饰符 with函数 调用

  • swift中lazy 修饰符和 lazy 方法以及get、set

    1,懒加载的写法 2,lazy修饰方法 另外一个不太引起注意的是,在 Swift 的标准库中,我们还有一组 laz...

网友评论

      本文标题:lazy修饰符和lazy方法

      本文链接:https://www.haomeiwen.com/subject/gjrwkxtx.html