问题标签 [deinit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
10695 浏览

ios - 转换到 SpriteKit 中的另一个 SKScene 后解除分配 SKScene

我有一个视图控制器,它有三个子场景。

当我从一个过渡到另一个时,旧的 skscene 不会被释放。

我希望它被释放,就好像它从未存在过一样。

例子:

当我第一次加载应用程序时,只有 1 个 skscene 可见(比如说它占用 100mb 内存),然后我转换到另一个(100mb 以上),然后是第三个(300mb 内存)。

我最终会得到 300mb 的内存,我想一直拥有 100 个。

我怎样才能做到这一点?

0 投票
0 回答
60 浏览

swift - 是否将可选实例设置为 nil 调用 deinit(如果已实现)?

这可能是一个疯狂的问题,但这周一直困扰着我。在 Swift 中,如果您有一个类的可选实例,是否将该可选实例设置为 nil 调用 deinit(如果已实现)或对该实例进行任何清理?

我假设在将指针设置为 nil 之后,不能再访问 Planet 的特定实例?

0 投票
2 回答
1228 浏览

swift - 清零弱变量和deinit,哪个先发生?

哪个先发生?

  • 清零(nilling)弱变量。
  • deinit
0 投票
13 回答
69534 浏览

swift - Deinit 从未调用过

我正在创建一个 ViewController 对象并将其推送到导航控制器。当对象从堆栈中弹出时 - 它没有被释放并且 Deinit 没有被调用。这可能是什么原因?

这是推送的代码:

这是弹出的代码:

0 投票
1 回答
2626 浏览

ios - Swift 中的弱对象数组

我想在 Swift 中创建一个对象数组作为另一个类的属性,例如:

我的限制是:

  1. 我想使用下标轻松访问 personArray 中的对象:例如houseInstance.personArray[1].name = "Steve"
  2. 我想创建personArray以便在person对象被释放时释放houseInstance对象。Swift 中最好的方法是什么?
0 投票
1 回答
367 浏览

swift - Swift 方法:不调用 deinit

这是 Apple 的 Swift Programming Book 中的一个代码示例(在章节:Deinitializers)

似乎没有调用 deinit 方法。为什么?

0 投票
0 回答
21 浏览

class - 为什么这些 swift 对象没有取消初始化?

我正在研究 Swift 语言参考,并试图了解如何实现弱引用和无主引用。下面的代码片段在书中,除了我还在初始化程序中添加了 println() 语句。当我执行它时,我确认对象已初始化,但它们不会取消初始化。

我的控制台输出是:

这对我来说意味着对象正在初始化,但没有取消初始化。为什么 Swift 坚持引用而不让对象被销毁?

0 投票
3 回答
1073 浏览

swift - 子对象可以在父对象的 deinit 期间引用其父对象吗?

我有一个父类和一个子类。父级对子级有强引用,子级对父级有无主引用。在父母的 deinit 期间,我希望孩子做一些清理工作,这涉及到打电话给父母:

不幸的是,doStuff()在父进程的 deinit 期间调用会导致崩溃,因为它使用self.parent

据我了解,父母应该仍然存在,因为父母的 deinit 尚未完成。然而这个错误似乎表明孩子不能再访问它对unowned父母的引用。

任何人都可以对此有所了解吗?

0 投票
1 回答
77 浏览

ios - 使用 iOS Storyboard Segues 的 Ad Hoc 导航

我有 3 个视图控制器:Main、List 和 Run。(稍后将添加更多内容。)我正在使用故事板和转场。目标操作系统是 iOS 8。Main 是初始场景/控制器。目前,我没有使用任何导航控制器。

Main 上的按钮通过 show segue 呈现 List。根据用户交互,List 可能会使用 unwind segue 返回到 Main,或者由 Run 使用 show segue 通过 performSegueWithIdentifier 以编程方式覆盖。到目前为止,一切都很好。

一旦列表继续运行,列表将永远不会被再次使用。Run 永远不会展开到 List。

当用户存在 Run 时,会触发 unwind segue,将用户带回 Main。问题是 List 永远不会被停用。(在 swift 中,永远不会调用 List.deinit()。)在从 List 转到 Run 之前,我会小心地将所有指向 List 的指针(包括委托)都归零。如果 List 直接展开到 Main,而不显示 Run,则 List 将按应有的方式释放。

那么,我在 List-to-Run 后面跟着 Run-to-Main segues 做什么来阻止 List 被释放?

请注意,我没有使用导航控制器,因为我不需要导航栏(我知道它可以隐藏),并且因为 List 不是唯一可以继续运行的 VC;还有其他几个。

0 投票
2 回答
1513 浏览

swift - 使用 NSTimer 是 Swift 导致 'deinit' 不调用

使用 NSTimer 后,类 deinit 方法永远不会被调用。该类是用 Swift 编写的,我在“init”处调用计时器,如下所示:

我也尝试将其NSTimer用作局部变量,但没有成功......有人遇到这个问题吗?我可以在 Swift 中使用不会导致类不被释放的计时器吗?谢谢