Swift值类型与引⽤类型
1.延迟存储属性
class KZHTeacher{
lazy var age: Int = 18
}
- 用 lazy 修饰的存储属性
- 延迟存储属性必须有一个默认值
- 延迟存储在第一次访问的时候才被赋值
- 延迟存储属性并不能保证线程安全
- 延迟存储属性对实例对象大小有影响
2.类型属性
class KZHTeacher{
static let shareInstance: KZHTeacher = KZHTheacher()
privet init(){}
}
- 使用关键字 static 修饰
- 类型属性必须有一个默认的初始值
- 类型属性只会被初始化一次
3.结构体的初始化
- 结构体不需要自定义初始化方法,这是因为编译器在结构体中自动帮我们生成了初始化方法
- 如果我们的属性有默认初始值,系统会提供不同的默认初始化方法
- 如果我们自定义初始化方法,系统就不会帮我们生成初始化方法
4.结构体是值类型
- mutating(只用于值类型,值类型本身创建之后是不允许修改的,如果要修改,需要使用 mutating 关键字)
- 结构体中的方法调度是静态调度 (编译,链接完成之后当前的函数地址就已经确定存放在了代码段)
- Sysbol Table: 存储符号位于字符串表的位置
- Dynamic Symbol Table: 动态库函数,位于符号表的偏移信息
- 类中方法调度是一般函数表调度,同时和函数声明的位置与关键字有关
- extesion 声明方法
- final关键字
- static关键字
- @objc关键字
- dynamic关键字