问题标签 [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 投票
3 回答
2873 浏览

ios - iOS 无法移除通知观察者。Deinit 没有被调用

我有一个类似于您在下面看到的 UIView:

}

我遇到的问题是,当用户点击后退按钮并返回到另一个 viewController 时,我无法从这个特定的 UIView 中删除观察者。

ViewWillDisppear被调用但deinit未被调用。奇怪的是,如果我们从中删除subscribeToNotifications()viewDidLoad()就会deinit调用。

另一个问题与内存泄漏有关。正如您在下面的屏幕截图中看到的,当视图确实订阅了通知并且用户离开/重新进入视图时,内存使用量会增加。在此处输入图像描述

现在将其与subscribeToNotifications()注释掉时进行比较,内存使用量没有增加,并且只有一个 viewController 实例。 在此处输入图像描述 结论是,通知订阅创建 UIView 的新实例之间似乎存在相关性,因此deinit没有被调用。

我想知道是否有一种方法可以取消初始化视图并取消订阅通知。

如果您需要更多信息,请告诉我。:)

0 投票
1 回答
361 浏览

ios - deinit 到底在做什么?为什么?

我的问题与为 Firebase 提供的示例代码有关。您可以在Github文档中找到它。无论如何,我真的不明白数据库参考上的“deinit”在做什么。我在这里阅读了 deinit swift 文档。我想我理解使用 deinit 的目的,但我不确定在这种情况下它是如何工作的。

0 投票
1 回答
434 浏览

swift - 延迟初始化和 deinit

我想知道是否有可能在我的视图控制器中使用惰性属性,并在deinit方法中调用我的惰性属性的方法,前提是它已被初始化。下面是一些代码:

这样,当session.delete()indeinit方法被调用并且session没有被使用时(仍然如此nil),它被初始化然后delete被调用。我不想要这个。我delete只想session在之前初始化的情况下打电话。

有没有办法做到这一点?我要放弃懒惰的初始化想法吗?

0 投票
0 回答
941 浏览

security - 在 Swift 中安全地删除变量?

我有一个登录屏幕,用户必须在其中输入其用户名和密码。我总是将密码存储在一个变量中并将其发送到服务器。然后我离开函数上下文,一切都很好,因为我不再参考有价值的信息。

但这一次它需要非常安全。当有人问我应用程序的安全性以及应用程序如何处理他的密码时,我希望能够说“别担心。你的数据是安全的。”

因此,如果用户手机上有一个被黑客入侵的应用程序,在我的用户输入他的密码并且它已被发送到服务器后,它会设法突破其沙箱,我想擦除这部分内存,这样恶意应用程序就无法检查我的线程并从中选择密码。

这个问题涉及 Swift 3.x。我曾想过取消初始化围绕凭据的包装类,但这是否足够?iOS 如何处理这种反初始化?

对此有何建议?

谢谢。

0 投票
1 回答
328 浏览

swift - 异步函数调用与取消初始化无主对象冲突

我有类似的代码,与异步上下文中的事件处理有关:

我认为这应该是安全的代码:在一个实例b消失之前,它会清除对其的所有引用foo,因此引用Foo.b永远不会成为问题。

self.b但是,我从内部的访问中得到这个错误Foo.bar()(在一些 GCD 队列上运行,而不是在主队列上运行):

exc_breakpoint(代码=exc_i386_bpt 子代码=0x0)

调试器显示这self.b完全没问题:不是零,所有值都是应有的。

但是,调试器也显示,与此同时,主线程正忙于去初始化相应的B; 它在 中暂停<... *>,即在foo可以从 中删除对 的引用之前aself.b所以对我来说,在这个时候这将是一个不好的参考是有道理的。

这似乎是一个不幸的时机——但我怎样才能消除这种崩溃的可能性呢?bar()毕竟,我无法阻止异步调用的发生!

0 投票
1 回答
934 浏览

ios - 呈现新的 ViewController 后 Deinit UITabBarController

我有一个用户可以登录的应用程序。如果用户启动应用程序并且已经登录,则rootViewController设置为我的自定义UITabBarController,但当用户未登录时,rootViewController设置为 LoginVC(视图控制器)。我的问题是,当用户注销时,应该显示 LoginVC,并且应该取消初始化 TabBar。

我努力了:

诸如此类的事情......我可以展示 LoginVC 但是当我调用self.tabBarController?.dismiss LoginVC 而不是 TabBarVC

任何帮助将不胜感激

0 投票
3 回答
2564 浏览

ios - Deinit 在 vi​​ewControllers 上实现它是一个好习惯吗?

我想知道deinit在每个视图控制器上实现 a 以检查它在消失时是否正确删除并避免内存泄漏是否是一种好习惯?

0 投票
0 回答
112 浏览

ios - 我如何在 ios 中释放 viewControllers

我提出了一些意见,例如Login -> Navigation Controller[Dashboard -> Detail]

在 LoginViewController 中,有 Login Button 并且它有Action

在导航控制器中

有两个视图,DashboardDetail

Detail视图由 segue 动作推送Dashboard

Dashboard有标签栏项目要注销

我知道当back buttonDetail视图中点击时,它不会释放Detail视图。它只是推回导航控制器的堆栈(是不是......?)

但是当我点击注销按钮时,我认为应该释放Dashboard包含两个视图(Dashboard, )的导航控制器Detail

但它没有被释放。

deinit像这样在导航视图控制器中设置方法

但它从来没有打电话

当我点击注销按钮时,如何取消分配登录后出现的视图

抱歉英语语法不好,因为我不是本地人

0 投票
1 回答
895 浏览

ios - 未调用表视图 deinit

table view在一个全新的项目中有一个正常的,没有额外的代码。在我的故事板中,我有 2 个视图控制器和一个navigation controller嵌入到First Controller. 在First Controller我有一个带有按钮和标签的表格视图。我已经在情节提要中segue从按钮到第二个控制器。cell

我想知道的是我什么时候deinit会先被调用controller,而不是被调用。我设置了断点,但似乎没有任何效果。

当我segue回到它工作时second,因为是。但是我们需要做什么才能在第一个控制器中运行?我需要先从吗?还是我需要明确指定其他地方?firstsecond controllercontrollerpoppeddeinitpopcontrollerstacknil

请帮我理解背后的正确概念?请指导我正确的方向。

代码-:

自定义单元格-:

第二控制器-:

0 投票
1 回答
951 浏览

ios - 在 deinit 中清理强引用是正确的模式吗?

有几个资源(博客SO question,加上我已经看到它在任何地方使用)建议从 中删除观察者NotificationCenterdeinit例如UIViewController

现在,虽然根据另一个博客条目,我不必关心从中删除观察者,NotificationCenter因为它使用weak引用,但我已经看到与其他引用使用相同的模式。

困扰我的问题。根据官方文档

在释放类实例之前立即调用 deinitializer。您使用 deinit 关键字编写反初始化器,类似于使用 init 关键字编写初始化器的方式。反初始化器仅适用于类类型。

这是否意味着如果仍然有对该类的强引用,deinit将不会被调用,从而使deinit引用清理无用?如果仍然有对viewControllerfrom 的强引用NotificationCenter,那么viewController'sdeinit将永远不会被调用,对吧?因此,删除强大的参考deinit永远不会真正起作用。

我在这里错过了什么吗?