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

ios - 迅捷;ViewController 从未取消初始化

我有一个MainViewController由 ViewModel(称为)支持的 ViewController(称为MainViewModel)。

ViewModel 有一个变量,它定义了哪个子 ViewControllerMainViewController应该作为其子级呈现。

我的问题是,当一个孩子被移走以支持另一个孩子时,它永远不会被deinit教育。

这是代码:

主视图控制器:

主视图模型:

您在MainViewModelsviewController变量中看到,它首先发出一个黄色的 ColorViewController,3 秒后发出一个绿色的。 ColorViewController是 UIViewController 的基本子类,具有彩色视图,并deinit覆盖了 - 方法。当黄色的 ColorViewController 被移除时,这个方法不会被调用。

谁拥有对那个黄色 ColorViewController 的引用,以及如何修复它?

奖金代码:

更新:

所以我将viewController-variable 更改为:

现在我看到所有ColorViewController生成的 '.map都按预期取消初始化。但是这两个传入.startWith, 永远不会被取消初始化,即使在.take(10)导致 Observable 完成之后也是如此。这对任何人都有意义吗?

0 投票
1 回答
150 浏览

ios - 将 UIViewController 添加为子视图后取消初始化 UIViewController

我需要添加一个视图控制器作为 mt 当前视图的子视图,但在我不再需要它之后无法取消初始化

0 投票
1 回答
745 浏览

ios - Deinit 方法在其实例初始化并且委托设置为某个视图控制器时自动调用

当我初始化 ABCViewController 实例以推送此控制器时,就像我在这里所做的那样。

视图控制器的 denit 方法在委托设置为 self 之后被调用,甚至在我推送视图控制器之前:-

我担心为什么会调用 deinit ?在这里我观察到其他方法,如 loadview 和 viewdidload 没有被调用。因此,在将控制器加载到内存之前,如何取消初始化。

0 投票
1 回答
2750 浏览

swift - Swiftui 视图关闭后如何清理环境对象?

我有一个相当大的项目,我从故事板和 xibs 开始。现在我正在使用 swiftui 实现一些新视图。这是我用来执行此操作的代码:

但是当我关闭(向下滑动)视图并再次打开它时出现问题,每次我这样做都会创建一个环境对象的额外副本,这个对象是一个处理 tcp 连接的类,缩短的代码如下:

观点是这样的:

0 投票
2 回答
583 浏览

ios - 视图控制器未初始化仍然内存泄漏

deinit在所有 VC 中都有方法来检查它们是否被取消初始化

当我注销时,我看到我所有的视图控制器都被取消初始化并且我LoginViewController的成为根视图控制器。但我仍然可以看到 RAM 使用量为90MB。每次我登录和注销时,它都会不断增加。如果我的视图控制器已取消初始化,是否有可能仍然存在内存泄漏?

我所知道的是,如果视图控制器被取消初始化,则没有内存泄漏。如果存在内存泄漏,视图控制器将不会取消初始化。

我错了吗?请帮忙。

更新:根据卢卡的建议,在这个答案的帮助下,我发现了内存泄漏。但我无法理解这些。有什么办法让它更具可读性吗?

在此处输入图像描述

0 投票
4 回答
318 浏览

swift - 当 SwiftUI 视图被关闭时,如何发送最后一条消息并关闭套接字?

我有一个带有处理 tcp 通信的ObservedObject的SwiftUI 工作表视图,当此工作表被解除时,我需要它发送最后一条 tcp 消息,然后关闭套接字。onDisappear事件似乎永远不会被触发(编辑:找到了罪魁祸首,因为我正在使用UIHostingController呈现工作表,仍然需要解决方案)我已经尝试将它放在表单、导航视图中,尝试创建一个新堆栈为此,没有任何效果。所以我尝试使用我的ObservedObject deinit ,但是如果我在关闭视图后尝试快速重新打开视图,这会给我一个糟糕的访问错误。

从我使用的连接类Network Framework

编辑:添加下面的视图代码

这些onDisappear 都不适合我,ScheduleForm 行中的行是唯一一个甚至会为我触发的行,但是它会在创建工作表时触发,并且每次我滚动一行时都会触发,但在我关闭工作表时不会触发.

0 投票
1 回答
1731 浏览

swiftui - 视图消失时如何使用组合框架取消初始化 ViewModel

我在 viewModels 中使用 Combine 来更新视图。但是,如果我将 AnyCancellable 对象存储到一组 AnyCancellable 中,则永远不会调用 deinit 方法。我使用 deinit 取消所有可取消对象。

每次重建视图时,都会实例化一个新的视图模型,但不会破坏旧的视图模型。viewText属性在每个实例上更新state.$view.removeDuplicates().map{ "view \($0)"}.assign(to: \.viewText, on: self).store(in: &cancellables)

如果我不将可取消对象存储在集合中,deinit则调用但viewText如果当前视图的状态发生更改则不会更新。

您是否知道如何在不增加视图模型实例的情况下管理状态更新?

谢谢

0 投票
1 回答
67 浏览

swift - 解雇后取消初始化 ViewController?

我的 App 中有两个 viewController,第一个 viewController 的代码如下图所示:

下面是第二个视图控制器中的代码:

但是,我注意到的是,当用户点击 secondViewController 的导航栏中的后退按钮时,每当 secondViewController 被解除。secondViewController 没有被取消初始化,因此,每当我在 firstViewController 内的 tableView 内按下不同的单元格时,在 secondViewController 内显示的导航栏标题仍然与我第一次按下时显示的标题相同。由于 secondViewController 没有取消初始化,因此,我看到的值与第一次初始化时相同。

我的问题是如何在 secondViewController 被解除时取消初始化它,以便每次我点击 firstViewController 内的 tableView 内的不同单元格时,都会初始化一个新的 secondViewController?

0 投票
1 回答
144 浏览

ios - 迅捷 | 在闭包中初始化并推送 UIViewController

例如,我们有三个 UIViewController: A、B、C

  1. 我们从AB

  2. 在 B 我们调用一些 API:

  1. 在上面的方法中,我们得到一些产品模型并推动C视图控制器关闭。

问题是,当我们从C视图控制器弹出到B视图控制器时——C视图控制器没有取消初始化。当我们从B视图控制器弹回到A视图控制器时, C视图控制器正在取消初始化。

我做错了什么?

0 投票
1 回答
49 浏览

ios - 在视图控制器释放之前将数据保存到数据库

我有一个显示一本书细节的视图控制器。我想要做的是在从导航控制器弹出视图控制器之前将数据保存到后台线程中的数据库。

我不知道将逻辑保存数据放在哪里,viewWillDisappear或者deinit是正确的选择?