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

相关推荐
初级代码游戏1 小时前
iOS开发 SwiftUI 8:NavigationView 导航
ios·swiftui·swift
美狐美颜SDK开放平台3 小时前
跨平台开发实战:直播美颜sdk动态贴纸在 Android / iOS / HarmonyOS 的落地方案
android·ios·harmonyos·美颜sdk·直播美颜sdk·视频美颜sdk·美颜api
2501_916008893 小时前
在不越狱前提下导出 iOS 应用文件的过程,访问应用沙盒目录,获取真实数据
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106323 小时前
Android和IOS 移动应用App图标生成与使用 Assets.car生成
android·ios·小程序·https·uni-app·iphone·webview
虹少侠3 小时前
基于 WebKit 构建 macOS 多浮窗视频播放的技术实践(含完整产品落地)
前端·macos·swift·webkit
2501_915918414 小时前
Mac 抓包软件有哪些?Charles、mitmproxy、Wireshark和Sniffmaster哪个更合适
android·ios·小程序·https·uni-app·iphone·webview
2501_915106324 小时前
iOS 抓包绕过 SSL 证书认证, HTTPS 暴力抓包、数据流分析
android·ios·小程序·https·uni-app·iphone·ssl
WeiAreYoung4 小时前
uni-app xcode 制作iOS Notification Service Extension 远程推送图文原生插件
ios·uni-app·xcode
2501_9159214312 小时前
iOS App 电耗管理 通过系统电池记录、Xcode Instruments 与克魔(KeyMob)组合使用
android·ios·小程序·https·uni-app·iphone·webview
且去填词19 小时前
Context 详解:如何在微服务链路中传递取消信号与超时控制
ios·iphone