swift 中的静态属性(static)隐式懒加载

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

我们在日常开发中经常会使用 static 声明静态属性,但是你知道静态属性的创建时机是什么时候吗?

我听到有人说在应用启动时,静态属性过多会影响启动速度,今天就来解释下这个问题。

我们先来看一道面试题,求问下面的代码是否会执行 MyClassinit 方法?

swift 复制代码
class ViewController: UIViewController {
    static let myClass = MyClass()

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

class MyClass {
    init() {
        print("MyClass init")
    }
}

先说答案,不会执行。

静态属性懒加载

其实 static 声明的静态属性是懒加载的,而且这种懒加载是隐藏式的,因为当你想为这个属性加上一个 lazy 关键字时,Xcode 会报这个错:

错误提示:Class stored properties not supported in classes; did you mean 'static'?

从这个错误提示中可以看出,static 已经是一个懒加载的属性了。

另外,也可以在 viewDidLoad 中调用一下这个属性来证明:

scss 复制代码
override func viewDidLoad() {
    super.viewDidLoad()
    
    print(Self.myClass)
}

打印结果为:

vbnet 复制代码
MyClass init
TestProject.MyClass

这也从侧面证明了 static 是一个懒加载的属性。

最后

其实知道了 static 是一个懒加载的属性,就不用再担心所有的 static 属性都在启动应用时创建了,static 属性过多也不会影响启动速度的。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
我是谁的程序员5 小时前
Mac 上生成 AppStoreInfo.plist 文件,App Store 上架
后端·ios
sweet丶5 小时前
微信Matrix 卡顿监控原理梳理与图解
ios
程序员老刘7 小时前
Flutter 3.44 有哪些变化?(官方blog完整翻译)
flutter·ai编程·客户端
2501_916007478 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
ZZH_AI项目交付11 小时前
我把 AI 最容易改坏真实 App 的地方,整理成了 skills
人工智能·ios·app
00后程序员张12 小时前
Windows 下怎么生成 AppStoreInfo.plist?不依赖 Xcode 的方法
ide·macos·ios·小程序·uni-app·iphone·xcode
原鸣清12 小时前
iOS 自定义 Markdown 渲染实践:从成品库到可魔改 Demo
ios
Daniel_Coder13 小时前
iOS Widget 开发-18:Widget 的 SwiftUI 视图适配与设计
ios·swiftui·swift·widget·widgetcenter
Daniel_Coder13 小时前
iOS Widget 开发-17:Widget 错误处理与空状态设计
ios·swift·widget·widgetcenter
wjm04100613 小时前
简单谈谈ios开发中的UI
开发语言·ios·swift