问题标签 [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 - Swift:初始化抛出时如何释放属性?
此示例代码存在内存泄漏。
指针 1和指针2在 Person 初始化成功之前分配。如果init
函数抛出错误。该deinit
函数永远不会被执行。所以pointer1和pointer2永远不会被释放。
有时逻辑非常复杂。在我的真实案例中。有很多allocate
和throws
与if
和guard
。有些很难控制。
有没有办法避免这种内存泄漏?
这是一个类似的问题:https ://forums.swift.org/t/deinit-and-failable-initializers/1199
ios - 通过 UIStoryboard.instantiateViewController 初始化的 UIViewController 在设置为 nil 时不会在单元测试期间取消初始化
我无法弄清楚为什么用 UIStoryboard.instantiateViewController 实例化的 UIViewController 在单元测试中初始化时不会取消初始化
这是我希望 deinit 但没有的代码:
结果是:
当 UIViewController 以编程方式初始化时,它将正确地取消初始化
结果:
有任何想法吗?
arrays - 以不同方式创建数组时,反初始化顺序不同
TL;DR:为什么,当数组与初始值一起创建时,值会立即取消初始化,但在创建数组后填充数组值会产生不同的行为?
我在 JavaScript 之后学习 Swift,它有 GC,所以 ARC 和反初始化的概念对我来说有点新手。为了更深入地理解它,我根据官方文档中的示例编写了以下代码:
当我使用现有用户实例 () 创建数组时array = [value, value]
,取消初始化会在分配给nil
( array[0] = nil
) 之后立即发生:
…但是当我第一次创建一个空数组然后用值(array = []; array[0] = value; array[1] = value
)填充它时,反初始化会在稍后的某个随机点发生:
从编译器的角度来看有什么区别?这种差异的原因是什么?
swift - 测试 UINavigationController 释放失败?
我有以下单元测试:
最后两个断言失败了。有什么方法可以可靠地测试 UIViewController 和 UINavigationController 的释放吗?
swift - 作为参数传递的 ViewController 未被取消初始化(Swift)
设置:
我有一个ViewController ProblemView
和class A
。我通过ProblemView
了课堂A
,所以我可以继续努力。它看起来像这样(简化):
问题:每当我在应用程序中重新启动此进程时,内存每次都会增加,直到出现内存错误。
我尝试了什么:我添加deinit
到两个课程中。class A
总是被取消初始化但class ProblemView
不是(这可能是问题吗?)。我还发现,当我不在workOn
全局范围内而是在passView
函数内声明时,它工作得很好。但是我需要全局变量,因为我在A
. 什么可能是这个问题的解决方案或解决方法?
ios - 在 deinit 中的 NotificationCenter.default.removeObserver(self),为什么 deinit 它甚至被调用?
从 ios 9 开始,没有必要从通知中心取消订阅,因为 ios 会自动处理这个,但在 ios 9 之前,开发人员必须手动调用NotificationCenter.default.removeObserver(self)
以避免内存泄漏和常见的地方是(在很多教程中都建议)和 Stackoverflow 帖子)deinit
。所以,我的问题是 - 如何使用deinit
从通知中注销deinit
只在对象释放之前调用,所以它的引用计数应该是 0,但肯定不是 - 因为我们仍然订阅通知中心。实现这一点的唯一可能方法似乎是使用弱引用,基本上如果通知中心弱引用对象,上述情况是可能的,但在这种情况下,根本不需要取消订阅,因为对象可以很容易地被释放。有人可以澄清一下这是如何工作的。
swift - deinit 没有被调用。帮我解决这个问题
我的预期答案是“Hellow,World!处理程序正在被取消初始化。” 如何解决这个问题?我只想更改一行代码,而不是整个代码。
swift - 什么时候准确地调用了`deinit`?(在斯威夫特)
具体什么时候deinit
调用?
当最后一个引用超出范围(通过返回、抛出或退出)时,是否C++
保证被调用?
或者正在Swift
使用垃圾收集器?
swift - 无法形成对类实例的弱引用 - Swift 错误
我收到错误消息:
objc [12772]:无法形成对 appName.ViewController 类的实例 (0x137d65240) 的弱引用。该对象可能被过度释放,或者正在被释放。
我觉得这很奇怪,因为这只有在我添加了一个按钮单击以通过实例化将用户带到这个 UIViewController 之后才发生。再次运行应用程序后,错误消失了,因此仅当用户从按钮进入此 UIViewController 时才会发生这种情况。
有没有人知道是什么导致了这个问题?
呈现视图控制器的代码: