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

相关推荐
怪力左手3 小时前
地图下载工具
开发语言·ios·swift
程序员老刘4 小时前
为什么我从不推荐GetX?11k星标背后的真相
flutter·客户端
他们都不看好你,偏偏你最不争气4 小时前
【iOS】KVC总结
macos·ios·objective-c·cocoa·kvc
YGGP7 小时前
【Swift】LeetCode 15. 三数之和
swift
Muen9 小时前
Swift-SOLID编程原则的实践
ios
我有与与症9 小时前
从0使用Kuikly框架写一个小红书Demo-Day4
客户端
HarderCoder9 小时前
Swift 6.2 类型安全 NotificationCenter:告别字符串撞车
swift
HarderCoder10 小时前
Swift 控制流深度解析(一):循环、条件与分支
swift
HarderCoder10 小时前
Swift 控制流深度解析(二):模式匹配、并发与真实项目套路
swift
我有与与症10 小时前
从0使用Kuikly框架写一个小红书Demo-Day3
客户端