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

swift - 未调用空快速项目中的 deinit

如果我使用 xcode(6.3.2) 创建一个新的“单视图应用程序”项目,并且只向 ViewController 添加一个 deinit 函数。运行应用程序,关闭应用程序。Deinit 永远不会被调用!我用几个设备和模拟器对其进行了测试。

这是为什么?这是标准行为吗?我该怎么做才能让它发挥作用?

/* 编辑 */ 阅读评论后,我把这段代码放到我的 Viewcontroller 中。

现在我明白了

这是否意味着我必须在 viewDidDisappear 调用中手动清理我的对象,因为视图控制器的 deinit 函数不可靠?

0 投票
1 回答
825 浏览

ios - SKPaymentQueue.defaultQueue().removeTransactionObserver(self) 删除和添加

对,所以我在应用商店里有这个游戏叫做 misshapen,在我的游戏中,我有应用内购买,但我发现了一个错误,如果有人按下应用内购买按钮,然后进入主菜单,就会导致游戏崩溃(IAP 在选项屏幕上)如果用户然后返回选项并点击 IAP,游戏会崩溃,因为已经有一个交易观察者。

要解决我的问题,我需要的代码行是

但我不确定在哪里调用它,因为如果调用错误,那么它会提示用户将一直使用苹果登录屏幕。我的解决方法是调用它

这有效并解决了我的问题,但是当用户返回菜单时,用户会收到苹果登录屏幕的提示,我不想要这个!请帮帮我谢谢!!:)

0 投票
0 回答
66 浏览

ios - 为什么我在精灵套件游戏中做了任何事情,但内存突然增加和减少?

我正在使用精灵套件开发一个简单的游戏。当我在我的设备上运行游戏时,我开始在游戏、主场景和关卡场景之间切换场景。但是,游戏内存增加但意外增加了 5 倍,并自动降低实际关卡。我只是等待游戏场景,什么都不做。正如您在图中看到的那样。

在此处输入图像描述

我尝试以下方法来解决问题:

  1. 在 GamePlay 类中调用 deinit 方法,但在发生这种意外减少时它没有调用 deinit 方法。
  2. 使用仪器内存分配,但无法弄清楚任何事情。

我使用 Xcode 调试会话。你有什么建议?我怎么能理解为什么内存会以这种方式增加和减少?

我正在呈现这样的场景。

我认为问题可能在于定义属性。我不知道。所以我写了我的类属性。当我呈现 GamePlay 场景时,会发生这种增加。呈现关卡场景或主场景或游戏结束场景时,它不会增加。

0 投票
1 回答
12753 浏览

swift - Swift 的 deinit 没有被调用

为什么我deinit的不叫。100一旦我能够做到这一点,我将提供赏金,并将奖励给帮助我解决这个问题的那个人......即使在解决问题之后我也会提供赏金。

非常重要的信息: 此代码调用 deinit. 这是工作。因为行数是 0。但我需要有elements.count。当我更改为这个时,deinit不会调用。

编辑:

0 投票
1 回答
4726 浏览

ios - 如何在 Swift 中正确清理 NSURLSession

我正在使用以下代码在类的 init 上创建一个 NSURLSession:

完成后,该类不会被取消初始化,并且任何未来上传的回调都将第一个类实例化为它们自己。上传完成后如何正确清理 NSURLSession?

我的整个班级可以在这里看到:

https://gist.github.com/aishowdown/e88f6595e5a23d936e29

0 投票
0 回答
327 浏览

ios - SCNAction.removeFromParentNode 和 deinit 未调用

以下方法定义在 GKComponent 的类扩展中

...

最后一个动作是SCNAction.removeFromParentNode(),在 moveAction 之后执行。

该节点已从图形场景中正确删除,但未调用相关节点的 deinit 并且我无法释放内存...

但是,如果我从序列中删除 moveAction ,则调用 deinit 。是bug??

func moveAlongNorthSouth() { let sequence = SCNAction.sequence([SCNAction.removeFromParentNode()]) self.node!.runAction(sequence) }

0 投票
1 回答
6511 浏览

swift - UITableViewCell 对象 deinit 从未被调用

问题出在我的项目中。但我也在新的 xcode 草案项目中尝试了 Master-Detail Application 之一。

我创建了基本单元类并将单元映射到情节提要上。删除操作后 deinit 从未调用过。对单元格没有强或弱的任何引用。

0 投票
0 回答
499 浏览

ios - UISplitViewController:在折叠模式下Deinit DetailView

我已经为此苦苦挣扎了一段时间,但我无法找到解决方案:

我有一个 iOS 9 应用程序,它支持所有设备系列,使用尺寸等级并使用 Swift 2.0 进行编程。我正在使用 aUISplitViewController并且一切都按我的意愿运行,除了在折叠的环境中(例如在 iPhone 上)。

Master-ViewController 是UITableViewController在选择单元格时触发替换segue 的。在折叠的环境中,这意味着 detailViewcontroller 被推送到屏幕上。视觉上的UISplitViewController行为有点像UINavigationController. 但是,当我使用后退按钮或滑动手势关闭 detailViewController 时,它不会被释放,直到在 Master-ViewController 中触发新的替换 segue。

我认为这是 的一种功能UISplitViewController,因为它最初旨在将两个内容彼此相邻显示。尽管如此,在一个折叠的环境中,我希望我UISplitViewController的行为像一个简单的UINavigationController,它在弹出时释放先前推送的 detailviewController。

在弹出 detailViewController 后,我一直在尝试手动更改 splitViewController 的viewControllers属性:

但这无济于事。简单地将 detailViewController 替换为空的“Dummy”-ViewController 也不起作用,因为它会自动为过渡设置动画。玩弄UISplitViewControllerDelegate也没有帮助我......

有没有解决方案(可能很简单?:)),我太盲目了,看不到?

0 投票
1 回答
26 浏览

ios - 我们可以在代码中使用取消初始化的变量,还是因为它们被立即释放而几乎没用?

在将其与 deinitaizlization 进行比较时,我对解除分配的主题有点困惑。在变量被取消初始化后不会发生释放......我的主要观点是,我们可以以某种方式使用/操作取消初始化的变量吗?或者它们几乎没用,因为释放发生在...之后?

0 投票
3 回答
34 浏览

ios - 我对在实例被取消初始化时如何操作实例内部的属性感到困惑?

我从 Apple 文档或 swift 书中得到了这个

当实例被取消初始化时,您仍然可以访问实例内部的属性,并且可以在实例完全消失之前根据需要操作它们。

我很困惑,他们的意思是当我们使用方法中的实例属性进行一些数学运算时deinit()?或者说当我们打印string属于特定实例的类型属性时,也来自deinit() 方法?如果是这样,那么该deinit()方法是在取消初始化时操作属性的唯一方法吗?