You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中静态属性与静态函数的差异咨询(附代码示例)

Swift中两种URLSessionConfiguration声明的核心差异

下面这两段代码,一个是带闭包初始化的静态存储属性,一个是静态函数,核心差异主要在这几个方面:

1. 实例创建时机与复用性

  • 静态属性sessionConfiguration:
    它的闭包是懒加载且仅执行一次——第一次访问这个属性时,闭包才会运行生成URLSessionConfiguration实例,之后无论再访问多少次,都会直接返回已经创建好的那个对象,相当于实现了单例效果。
    代码示例:

    static var sessionConfiguration: URLSessionConfiguration = {
        let myConfig = URLSessionConfiguration.default
        let base64LoginString = EndpointController.getBase64StringLoginWithUserAndPasswordV2()
        myConfig.httpAdditionalHeaders = ["Authorization" : base64LoginString]
        return myConfig
    }()
    
  • 静态函数getURLSessionConfigurationDefault():
    每次调用这个函数,都会完整执行一遍函数内部的代码,生成一个全新的URLSessionConfiguration实例,每次返回的都是独立的对象,不存在复用。
    代码示例:

    static func getURLSessionConfigurationDefault() -> URLSessionConfiguration {
        let myConfig = URLSessionConfiguration.default
        let base64LoginString = EndpointController.getBase64StringLoginWithUserAndPasswordV2()
        myConfig.httpAdditionalHeaders = ["Authorization" : base64LoginString]
        return myConfig
    }
    

2. 状态更新的时效性

如果EndpointController.getBase64StringLoginWithUserAndPasswordV2()的返回值会变化(比如用户切换账号、授权token过期更新):

  • 静态属性的配置不会自动更新,因为它只在第一次访问时获取一次授权字符串,后续一直用旧的Authorization头。
  • 函数每次调用都会重新获取最新的授权字符串,生成的配置始终是当前有效的状态。

3. 使用方式的简洁度

  • 静态属性直接通过你的类名.sessionConfiguration访问,语法更简洁,像读取普通变量一样。
  • 静态函数必须通过你的类名.getURLSessionConfigurationDefault()调用,需要加括号执行,是方法调用的形式。

4. 内存占用情况

  • 静态属性初始化后,对应的URLSessionConfiguration对象会一直驻留在内存中(只要类本身还在内存里),如果这个配置不常用,会造成不必要的内存占用。
  • 函数生成的对象,在使用结束且没有其他强引用的情况下,会被Swift的ARC自动回收,不会长期占用内存。

内容的提问来源于stack exchange,提问作者fabiobh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:09:15