swift-属性总结

  • 存储属性会占用实例变量的内存空间,且根据let/var关键字来生成对应的get/set方法
  • 计算属性不会占用内存空间,本质是set/get方法
  • 属性观察者:
    1. willSet:新值存储之前调用,先调用子类,再调用父类
    2. didSet:新值存储之后调用,先调用父类,再调用子类
    3. init方法赋值不会触发属性观察,子类init中调用父类init方法后赋值,会触发属性观察
    4. 属性观察可添加在类中的存储属性继承存储属性继承计算属性
  • 延迟存储属性:
    • 使用lazy进行修饰,必须是var修饰的变量,且有一个默认初始值
    • 只有在第一次访问时才会赋值,并且是线程不安全
    lazy会影响实例对象分配的内存大小,因为lazy修饰的属性在底层会被定义为Optionnal,而optionnal本质是一个enum,并且会占用1个字节大小来存储case
  • 类型属性:
    • 使用static修饰,且必须有一个默认初始值
    • 是一个全局变量,只会被初始化一次,是线程安全的,本质是通过dispatch_once实现的
    • 可使用创建单例对象

你可能感兴趣的:(swift-属性总结)