问题标签 [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.
ios - iOS 无法移除通知观察者。Deinit 没有被调用
我有一个类似于您在下面看到的 UIView:
}
我遇到的问题是,当用户点击后退按钮并返回到另一个 viewController 时,我无法从这个特定的 UIView 中删除观察者。
ViewWillDisppear
被调用但deinit
未被调用。奇怪的是,如果我们从中删除subscribeToNotifications()
,viewDidLoad()
就会deinit
调用。
另一个问题与内存泄漏有关。正如您在下面的屏幕截图中看到的,当视图确实订阅了通知并且用户离开/重新进入视图时,内存使用量会增加。
现在将其与subscribeToNotifications()
注释掉时进行比较,内存使用量没有增加,并且只有一个 viewController 实例。
结论是,通知订阅创建 UIView 的新实例之间似乎存在相关性,因此
deinit
没有被调用。
我想知道是否有一种方法可以取消初始化视图并取消订阅通知。
如果您需要更多信息,请告诉我。:)
swift - 延迟初始化和 deinit
我想知道是否有可能在我的视图控制器中使用惰性属性,并在deinit
方法中调用我的惰性属性的方法,前提是它已被初始化。下面是一些代码:
这样,当session.delete()
indeinit
方法被调用并且session
没有被使用时(仍然如此nil
),它被初始化然后delete
被调用。我不想要这个。我delete
只想session
在之前初始化的情况下打电话。
有没有办法做到这一点?我要放弃懒惰的初始化想法吗?
security - 在 Swift 中安全地删除变量?
我有一个登录屏幕,用户必须在其中输入其用户名和密码。我总是将密码存储在一个变量中并将其发送到服务器。然后我离开函数上下文,一切都很好,因为我不再参考有价值的信息。
但这一次它需要非常安全。当有人问我应用程序的安全性以及应用程序如何处理他的密码时,我希望能够说“别担心。你的数据是安全的。”
因此,如果用户手机上有一个被黑客入侵的应用程序,在我的用户输入他的密码并且它已被发送到服务器后,它会设法突破其沙箱,我想擦除这部分内存,这样恶意应用程序就无法检查我的线程并从中选择密码。
这个问题涉及 Swift 3.x。我曾想过取消初始化围绕凭据的包装类,但这是否足够?iOS 如何处理这种反初始化?
对此有何建议?
谢谢。
swift - 异步函数调用与取消初始化无主对象冲突
我有类似的代码,与异步上下文中的事件处理有关:
我认为这应该是安全的代码:在一个实例b
消失之前,它会清除对其的所有引用foo
,因此引用Foo.b
永远不会成为问题。
self.b
但是,我从内部的访问中得到这个错误Foo.bar()
(在一些 GCD 队列上运行,而不是在主队列上运行):
exc_breakpoint(代码=exc_i386_bpt 子代码=0x0)
调试器显示这self.b
完全没问题:不是零,所有值都是应有的。
但是,调试器也显示,与此同时,主线程正忙于去初始化相应的B
; 它在 中暂停<... *>
,即在foo
可以从 中删除对 的引用之前a
。self.b
所以对我来说,在这个时候这将是一个不好的参考是有道理的。
这似乎是一个不幸的时机——但我怎样才能消除这种崩溃的可能性呢?bar()
毕竟,我无法阻止异步调用的发生!
ios - 呈现新的 ViewController 后 Deinit UITabBarController
我有一个用户可以登录的应用程序。如果用户启动应用程序并且已经登录,则rootViewController
设置为我的自定义UITabBarController
,但当用户未登录时,rootViewController
设置为 LoginVC(视图控制器)。我的问题是,当用户注销时,应该显示 LoginVC,并且应该取消初始化 TabBar。
我努力了:
诸如此类的事情......我可以展示 LoginVC 但是当我调用self.tabBarController?.dismiss
LoginVC 而不是 TabBarVC
任何帮助将不胜感激
ios - Deinit 在 viewControllers 上实现它是一个好习惯吗?
我想知道deinit
在每个视图控制器上实现 a 以检查它在消失时是否正确删除并避免内存泄漏是否是一种好习惯?
ios - 我如何在 ios 中释放 viewControllers
我提出了一些意见,例如Login -> Navigation Controller[Dashboard -> Detail]
在 LoginViewController 中,有 Login Button 并且它有Action
在导航控制器中
有两个视图,Dashboard
和Detail
Detail
视图由 segue 动作推送Dashboard
并Dashboard
有标签栏项目要注销
我知道当back button
在Detail
视图中点击时,它不会释放Detail
视图。它只是推回导航控制器的堆栈(是不是......?)
但是当我点击注销按钮时,我认为应该释放Dashboard
包含两个视图(Dashboard
, )的导航控制器Detail
但它没有被释放。
我deinit
像这样在导航视图控制器中设置方法
但它从来没有打电话
当我点击注销按钮时,如何取消分配登录后出现的视图
抱歉英语语法不好,因为我不是本地人
ios - 未调用表视图 deinit
我table view
在一个全新的项目中有一个正常的,没有额外的代码。在我的故事板中,我有 2 个视图控制器和一个navigation controller
嵌入到First Controller
. 在First Controller
我有一个带有按钮和标签的表格视图。我已经在情节提要中segue
从按钮到第二个控制器。cell
我想知道的是我什么时候deinit
会先被调用controller
,而不是被调用。我设置了断点,但似乎没有任何效果。
当我segue
回到它工作时second
,因为是。但是我们需要做什么才能在第一个控制器中运行?我需要先从吗?还是我需要明确指定其他地方?first
second controller
controller
popped
deinit
pop
controller
stack
nil
请帮我理解背后的正确概念?请指导我正确的方向。
代码-:
自定义单元格-:
第二控制器-:
ios - 在 deinit 中清理强引用是正确的模式吗?
有几个资源(博客,SO question,加上我已经看到它在任何地方使用)建议从 中删除观察者NotificationCenter
,deinit
例如UIViewController
:
现在,虽然根据另一个博客条目,我不必关心从中删除观察者,NotificationCenter
因为它使用weak
引用,但我已经看到与其他引用使用相同的模式。
困扰我的问题。根据官方文档:
在释放类实例之前立即调用 deinitializer。您使用 deinit 关键字编写反初始化器,类似于使用 init 关键字编写初始化器的方式。反初始化器仅适用于类类型。
这是否意味着如果仍然有对该类的强引用,deinit
将不会被调用,从而使deinit
引用清理无用?如果仍然有对viewController
from 的强引用NotificationCenter
,那么viewController
'sdeinit
将永远不会被调用,对吧?因此,删除强大的参考deinit
永远不会真正起作用。
我在这里错过了什么吗?