问题标签 [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.
swift - 在 segue 之后未调用 ViewController 的 deinit
我有两个测试控制器:TestController1
和TestController2
. 当第二个控制器加载或出现时,我试图通过更改UIApplication.shared.window[0].rootViewController
为 self ( TestController2
) 来取消第一个控制器。但是什么都没有发生,我的内存中也有两个控制器。所以,我的问题是:我怎样才能deinit
所有的 ViewControllers 只保留一个?
我所有的测试控制器都有 deinit 方法,我试图在它执行时打印“deinited”,所以我没有像这里提出的许多问题那样的断点问题。
这是我TestController2
的代码:
我所有的尝试都不起作用..
更新:第一个和第二个控制器只有一个按钮。没有任何业务逻辑。我在 Storyboard 上通过 ctrl+drag 模式从控制器 1 的按钮到控制器 2 创建了一个 segue。
swift - Deinit 调用了两次
这似乎出现在我们项目的两个控制器上。我检查了代码和情节提要,情节提要中的转场没有在控制器中调用,没有与将触发转场的按钮相关的 IBAction 或 IBOutlet 。虽然当我离开我的控制器时,我可以从打印中看到 deinit 方法被调用了两次。
这很奇怪,因为 viewDidLoad 和 viewWillDisappear 只被调用一次,以前有没有人遇到过这种行为?与 SO 上的双重 deinit 没有任何关系,我非常想了解发生了什么。
编辑:所以,一点更新。我添加了这段代码,我设置了一个断点来检查控制器何时初始化:
因此,当我触发 segue 到达我的控制器时,init coder 被调用一次,当我点击插入 popSegue 的所述控制器的 ok 按钮时,我的控制器然后第二次初始化(也使用 init coder)和然后发生双重deinit。
因此,当我使用 popSegue 将其关闭时,会创建一个空的控制器实例。我不明白为什么。
swift - 涉及 NSHashTable 的特殊情况下不调用 Deinit
我遇到了一些奇特而有趣的事情,并且很想从任何人那里获得意见。所以首先让我们来定义这个类:
现在让我们考虑以下内容:
如果我们做了以下 deinit 被调用:
现在让我们做同样的事情,但通过调用 doit() 方法
这里的问题是为什么在这种情况下不调用 deinit ?这有什么不同,因为它本质上与第一种方法具有相同的引用分配?
我很想得到任何人的意见。
swift - 为什么直到 UIView 再次添加到父级才调用 deinit?
我有一个正在添加到 UIViewController 的 UIView,并且通常正在测试反初始化以确保我做对了。但是,当我没有将 viewController 中的变量设置为 nil 并且只使用 .removeFromSuperView() 时, UIView 中的 deinit() 方法将不会被调用,直到我再次添加 UIView 然后它被调用。但是,如果我使用 removeFromSuperView() 并将变量设置为 nil,则立即调用 deinit()。这是为什么?
这是 UIView() 类:
这是父 ViewController :
swift - 了解 Swift 反初始化器
Swift deinitializer 没有更新 valueone 和 valuetwo,当我打印 mainTotal.sum 时,我得到零作为答案,它应该更新值并将答案打印为 95
ios - 我调用 URLSession.share.datatask 并在它完成之前用户弹出 uiviewcontroller
我不确定如何防止我的应用程序出错。我需要使用 URLSession.shared.dataTask 调用服务器,如果我允许它完成,它工作得很好。但是,如果我在 URLSession.shared.dataTask 完成之前将 uiviewcontroller 从堆栈中弹出,则会发生运行时错误,因为 viewcontroller 不再存在。它发生在json解析和网络调用的不同地方。通常在回调或网络调用失败时显示错误。有谁知道如何在 uiviewcontroller deinits 时停止网络调用,或者在网络调用代码中检测到 uiviewcontroller 已经消失,所以我不调用回调。我正在使用带有 Swift 3 的 Xcode 8 和 iOS 10。谢谢。
ios - 当 uiviewcontroller 被取消并且有一个活动的 urlsessiontask 时如何防止崩溃
当我有一个活动的 URLSessionTask 并且用户按下后退按钮并且视图控制器被取消时,我的 Swift 3 iOS 应用程序崩溃了。我在后退按钮的 urlsessiontask 上调用了取消方法,当时没有发生崩溃,但是当用户返回视图控制器时,应用程序崩溃了。如果用户允许 url 会话任务完成,则不会发生崩溃。有谁知道我可以做些什么来防止崩溃?我正在使用 iOS 10、Swift 3、Xcode 8。提前致谢。
swift - 值类型内的引用类型
我正在探索 Swift 值类型,尤其是结构,以更好地了解它在不同场景中的用途。我很惊讶地看到枚举如何用于构建二叉搜索树,使用indirect
它引入了一层薄薄的参考语义。
现在来到真正的问题,我正在努力寻找的是,值类型中的引用类型会发生什么。这种关系将如何运作?比如内存管理,对象生命周期。
例如
在上述情况下,值类型持有对引用类型的引用。
- 什么时候会
deinit
被叫到? - 每个类型的新结构实例是否都会
A
引用相同的类实例,B
或者它们会有所不同。 - 我应该注意什么或者这是代码异味?
- 还要别的吗?
ios - iOS Swift3 ViewController 从不调用 deinit
我有 4 个 UIViewController,所有模式都使用 Storyboard,都展开到同一个根视图控制器,但是 1 个视图控制器从不调用 deinit。我知道这个特定的 VC 不需要 deinit,因为我在 deinit 中有打印语句。
我没有保留有关问题 VC 的任何参考周期,也没有对任何这些观点的任何参考。segue 在情节提要中使用适当的标识符定义,并且 performSegue 在 rootVC 内被调用到这 4 个 VC 中的每一个。
4 个 VC 之间的唯一区别是有问题的一个使用 UITableView 并且没有 VC 不是 UITableViewController,tableView 是使用扩展嵌入的,并且工作正常。
这个应用程序的本质是依次循环浏览 4 个屏幕,然后弹回第一个 VC。所以我担心这个从不去初始化的 VC 会直接泄漏,没有明确的原因。
请帮忙,谢谢。