静态变量释放时迅速

2024-01-05

我想知道什么时候static变量将被释放,所以我创建如下:

class A {
    init() {
        print("A init")
    }

    deinit {
        print("A deinit")
    }
}

class B {
    static let a = A()

    deinit {
        print("B deinit")
    }

    init() {
        print("B init")
    }
}

var b: B? = B()
B.a
b = nil

当变量a's deinit被称为?如果b = nil then A's deinit没有被叫到。


仅当没有其他对象对它有强引用时,对象才会被取消初始化。

就你而言,b is not持有参考a。班上B is.

Setting bto nil 不执行任何操作a因为b从未提及过a. b本质上是无关的。a and b是不相关的对象。

现在我们知道了class B持有一个参考a,我们能以某种方式破坏这个班级吗B以便a可以取消初始化吗?答案是不。a就像全局范围内的变量一样。a仅当程序停止时才会被取消初始化。

使某些内容去初始化的另一种方法是将对其的所有引用设置为引用其他内容。但由于在这种情况下a声明为let,你无法真正改变它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态变量释放时迅速 的相关文章

随机推荐

  • Fluent NHibernate - 配置 Oracle Data Provider ODP

    我是 NHibernate 和 Fluent NHibernate 的新手 我正在尝试让以下配置正常工作 private static ISessionFactory CreateSessionFactory return Fluently
  • Python 中的正则表达式反向引用问题

    我不知道为什么这不起作用 也许我遗漏了 Python 正则表达式的一些东西 这是我的正则表达式和我希望它匹配的示例字符串 PHONE REGEX lt gt phone EXAMPLE
  • 向传单地图添加任意图像

    我正在尝试使用传单来显示比平时更小的地图 所以我不想使用普通的平铺系统 我不关心平滑缩放和在需要时加载更高分辨率的图块 相反 我尝试从图像文件添加光栅图像 可以这么说当我谷歌 手绘地图 时出现 So I try download file
  • 将角色关联到正在运行的 AWS 实例

    为了运行AWS监控脚本 http docs aws amazon com AmazonCloudWatch latest DeveloperGuide mon scripts perl html http docs aws amazon c
  • 创建 TCP 网络错误以进行单元测试

    我想在测试期间创建各种网络错误 我在 Linux 上直接在 C 中使用 Berkely 套接字 API 我正在 Boost Test 中的另一个线程中运行模拟服务器 该线程在本地主机上侦听 例如 我想在连接期间创建超时 到目前为止 我已经尝
  • 取消图标的亮点

    在编程和查看所有不同的应用程序时 我意识到应用程序商店中的某些应用程序顶部没有亮起的突出显示 使其看起来更具 3D 效果 我有一个应用程序的想法 但我需要去掉重点 该应用程序已在 Xcode 中编程 因此如果有人回答 那就太好了 谢谢 fr
  • C# 中的多媒体定时器中断(前两个中断不好)

    我使用分辨率为 1 毫秒 周期为 10 毫秒的多媒体计时器 问题是多媒体计时器严重中断了前两个事件 因为我得到了 1 ms 的差异 这不是我想要的 public partial class Form1 Form public Form1 I
  • 使用 django-autocomplete-light 添加更多字段时出错

    我有一个问题 我正在使用 2 个库 Django 自动完成灯 and Django 动态表单集 两人都非常擅长完成自己的工作 第一个用于自动完成 第二个用于使 django 表单集动态化 but当你想加入这两个时 就会出现问题 问题的图像
  • 工具栏按钮单击事件功能

    我已经在中创建了设置按钮Toolbar 现在每当我单击设置按钮时 我都需要将屏幕导航到设置屏幕 menu menu
  • 如何淡化 UIImageView 的角/边缘/边框

    我在论坛上找不到这个 所以我决定发布这个 我有一个 UIImageView 其代码如下 可以使图像彼此淡出 void viewDidLoad super viewDidLoad Do any additional setup after l
  • Emacs 23、emacsclient 参数?

    我最近安装了 Emacs 23 在 OS X Leopard 上 并尝试了 emacs 服务器 我尝试了两种方法 1 将 server start 放入我的 emacs文件中 2 在终端运行emacs daemon 在单独的试验中 不是同时
  • 有没有办法获得有关未使用功能的警告?

    我想在代码库中找到未使用的函数 包括跨编译单元 我使用 gcc 作为我的编译器 这是一个例子 foo c 假设适当foo h void foo void bar main c include
  • Capybara 找不到 Semantic-ui 的选择框

    I use capybara with 水豚 webkit and 语义用户界面 但似乎下拉菜单不能开箱即用 因为
  • 在 Python 中使用双线性插值调整大小

    我正在尝试使用双线性插值手动实现调整图像大小 到目前为止 我得到的是插值本身的函数 它似乎工作正常 但调整大小函数似乎仅在角上正常工作 def bilinear interpolation image y x height len imag
  • 有人更改 Visual Studio 默认支撑样式吗? - 有标准吗?

    我发现默认的支撑样式在行数上有点浪费 例如 function foo if else 例如 如果我用 JavaScript 编写 会像这样写 function foo if else 据我了解 这可能也不符合人们的口味 但问题是你是否关闭
  • ECMAScript 2017:为什么 EscapeSequence 包含 NonEscapeCharacter?

    以下摘录参考ECMAScript 2017 https www ecma international org ecma 262 8 0 index html prod EscapeSequence 11 8 4 字符串文字 注释 1 字符串
  • 将 std::unique_ptr 返回到多态类对象的正确方法

    假设我有以下类层次结构 struct Base struct Derived public Base void DoStuffSpecificToDerivedClass 以及以下工厂方法 std unique ptr factoryMet
  • 如何从 Flex 3 中基于对象的关联数组中删除值?

    我需要删除与 Flex 3 关联数组中的属性关联的值 这可能吗 例如 假设我像这样创建了这个数组 var myArray Object new Object myArray someXML attribute foo 后来 我需要做这样的事
  • 如何修复:“无法加载模块脚本...”Angular 8、Electron 5

    我正在尝试使用 Angular 8 制作 Electron 5 应用程序 我已经遵循了几个在线教程 但仍然遇到相同的错误 我已经创建了一个新项目 运行ng serve open它工作得很好 我得到了默认的角度主页 然后我安装了电子npm i
  • 静态变量释放时迅速

    我想知道什么时候static变量将被释放 所以我创建如下 class A init print A init deinit print A deinit class B static let a A deinit print B deini