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

相关推荐
2501_916008892 小时前
全平台抓包工具,Windows、iPhone、Linux三个平台抓包测试
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_915918415 小时前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
李游Leo7 小时前
HarmonyOS 7 实战开发 04:适配手机、折叠屏与大屏布局
ios·harmonyos
终端安全笔记7 小时前
iOS 27 强制 TLS 1.2:租赁设备的注册链路会在哪一环断
android·网络·安全·ios·智能手机
黑科技iOS上架8 小时前
iOS深度混淆flutter应用的最佳实践
flutter·ios·混淆·审核·深度混淆
Patrick_Wilson8 小时前
桌面端发布的真实成本:签名、公证和那支不能共享的 USB Key
ci/cd·electron·客户端
思盛iOS签名上架9 小时前
IOS企业签名作用(核心作用一)
ios·testfight
黑科技iOS上架1 天前
unity3D 应用AppStore4.3被拒怎么自查
ios·审核·unity3d混淆
用户38034165882971 天前
FFmpeg 在 iOS 上的裁剪、集成与包体控制
ios·音视频开发
liulilittle1 天前
为什么采用全局管理缓存及状态:麻将客户端状态管理
服务器·网络·游戏·客户端·异步·mahjong·麻将