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新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
用户2235862182023 分钟前
WebKit WebPage API 的引入尝试与自研实现
ios
啦啦啦!2 小时前
ChatGPT和Gemini的接入和封装
人工智能·ios·chatgpt
报错小能手3 小时前
ios开发方向——swift并发进阶核心 async/await 详解
开发语言·ios·swift
开心就好20253 小时前
HTTPS超文本传输安全协议全面解析与工作原理
后端·ios
牛马1114 小时前
Flutter iOS 权限配置完整指南(定位权限)
flutter·ios
A_QXBlms4 小时前
多账号轮询架构 — 利用企销宝iPad协议突破单账号群发次数限制
ios·架构·ipad
用户79457223954134 小时前
【Lottie】让设计稿上的动效直接"活"在 App 里
swiftui·swift
HH思️️无邪5 小时前
Flutter + iOS 实战指南:教程视频 PiP + 退桌面(可复用模板)
flutter·ios
亘元有量-流量变现5 小时前
深度技术对比:Android、iOS、鸿蒙(HarmonyOS)权限管理全解析
android·ios·harmonyos·方糖试玩
sunz_dragon5 小时前
iPhone_签到App_自动化实战
ios·自动化·iphone