美文网首页Swift学习
003-Swift进阶-属性-lazy

003-Swift进阶-属性-lazy

作者: Stronger_J | 来源:发表于2020-12-16 17:53 被阅读0次

一、存储属性

1、属性存储

class LJTest{
    var age = 18
    var name: String = "swift"
}
var t1 = LJTest()
print(class_getInstanceSize(LJTest.self))  //40字节(8 + 8 + 8 + 16)
image.png

2、延迟属性 lazy
延时加载存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用 lazy 来标示一个延时加载存储属性。
<font color=red>注意:</font>必须将延时加载属性声明成变量(使用 var 关键字),因为属性的初始值可能在实例构造完成之后才会得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延时加载。

lazy var age = 18 //正确
lazy let age = 18 //错误

//对应sil
class LJTest {
  lazy var age: Int { get set }
  @_hasStorage @_hasInitialValue final var $__lazy_storage_$_age: Int? { get set }
  @_hasStorage @_hasInitialValue var age1: Int { get set }
  @_hasStorage @_hasInitialValue var name: String { get set }
  @objc deinit
  init()
}
  • lazy修饰是必须有一个初始值
  • lazy只有在第一次被调用是才会被初始化


    image.png

    sil分析:


    image.png
  • lazy修饰会增加8字节的大小
  • 可以看到lazy延迟属性在sil中是可选类型?
  • 延迟存储属性并不能保证线程安全

相关文章

  • 003-Swift进阶-属性-lazy

    一、存储属性 1、属性存储 2、延迟属性 lazy延时加载存储属性是指当第一次被调用的时候才会计算其初始值的属性。...

  • Lazy属性

    lazy概念: 只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql语句,只对...

  • Swift中的属性

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

  • iOS Lazy 的详细使用

    1 Lazy 只被调用一次计算。 2 Lazy 里不要包含变量属性。

  • kotlin—lazy及其原理

    1、lazy简介 lazy是属性委托的一种,是有kotlin标准库实现。它是属性懒加载的一种实现方式,在对属性使用...

  • lombok 文档翻译

    @Getter 可选元素: 使用示例: 说明: Lazy:默认为:false,如果设置 lazy 则 该属性必须为...

  • 从源码角度分析 Kotlin by lazy 的实现

    by lazy 的作用 延迟属性(lazy properties) 是 Kotlin 标准库中的标准委托之一,可以...

  • 从源码角度分析 Kotlin by lazy 的实现

    by lazy 的作用 延迟属性(lazy properties) 是 Kotlin 标准库中的标准委托之一,可以...

  • 08-属性

    属性 存储属性 计算属性 注:不能只有set 枚举rawValue原理 延迟存储属性(Lazy Stored Pr...

  • Swift延迟存储属性(Lazy)

    延迟存储属性(Lazy) 用Lazy修饰的存储属性 延迟存储实行必须有一个默认的初始值 延迟存储属性在第一次访问的...

网友评论

    本文标题:003-Swift进阶-属性-lazy

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