-
存储属性会占用实例变量的内存空间,且根据
let/var关键字来生成对应的get/set方法 -
计算属性不会占用
内存空间,本质是set/get方法 - 属性观察者:
-
willSet:新值存储之前调用,先调用子类,再调用父类 -
didSet:新值存储之后调用,先调用父类,再调用子类 -
init方法赋值不会触发属性观察,子类init中调用父类init方法后赋值,会触发属性观察 -
属性观察可添加在类中的存储属性、继承的存储属性,继承的计算属性
-
- 延迟存储属性:
• 使用lazy进行修饰,必须是var修饰的变量,且有一个默认初始值
• 只有在第一次访问时才会赋值,并且是线程不安全的
•lazy会影响实例对象被分配的内存大小,因为lazy修饰的属性在底层会被定义为Optionnal,而optionnal本质是一个enum,并且会占用1个字节大小来存储case - 类型属性:
• 使用static修饰,且必须有一个默认初始值
• 是一个全局变量,只会被初始化一次,是线程安全的,本质是通过dispatch_once实现的
• 可使用创建单例对象
swift-属性总结
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- Swift 进阶之路 文章汇总[https://www.jianshu.com/p/5fbedf309237] 本...
- Swift编译过程 编译过程(OC、Swift的区别) OC中通过clang编译器,编译成IR,然后再生成可执行文...
- 原文博客地址: 浅谈Swift的属性(Property) 今年期待已久的Swift5.0稳定版就已经发布了, 感兴...