gpt4 book ai didi

ios - Swift:当我转到另一个 View Controller 时,内存未清除,收到内存警告

转载 作者:搜寻专家 更新时间:2023-10-31 21:55:45 25 4
gpt4 key购买 nike

我正在为 iOS 8.1 在 Xcode 6.2 中构建一个应用程序。我有一个 UIViewController (LevelViewController),其中包含一个 UICollectionView,每个单元格代表我游戏中的一个级别(每个单元格都有一个标签 w/数字)。一旦选择了其中一个单元格,我就会对 SKScene 执行显示转场,它会加载该特定级别的所有数据。我还有一个“菜单”按钮,它会执行显示转场回到主菜单.

在功能上这一切都有效,但是在执行这两个 segue 之后我遇到了严重的内存问题。在查看仪器后,似乎当我从 LevelViewController 中分离出来时,我为每个单独的 UICollectionViewCell 添加的所有 UILabel 都保留在内存中,连同单元格中包含的所有其他内容。应该只有 192 个标签(192 个级别),但在多次执行此 segue 之后,它们在仪器中加起来约为 1000 个。

显然这些并没有在内存中被释放,我的理解是 swift 应该处理这个问题,所以我不确定问题是什么。我还应注意,UICollectionView 是以编程方式添加的,没有使用 IBOutlets

那么当我离开 LevelViewController 时,我究竟该如何摆脱这些标签,实际上是 UICollectionView 本身。我对此感到非常困惑,它毁了我的圣帕特里克节。所以为了爱尔兰人的爱,请帮助一个小伙子:)

注意:我试过的方法

self.collectionView.removeFromSuperView()
self.collectionView = nil
self.collectionView.deleteItemsAtIndexPaths(path)

最佳答案

如果没有看到您用来执行这些转场的代码,很难判断。但我猜这个问题与你如何在 View Controller 之间进行 segueing 有关。

I also have a "menu" button which performs a show segue back to the main menu.

如果我不得不根据您上面的语言进行猜测,而不是弹出 Level ViewController(我假设它嵌入在 UINavigationController 中),您正在尝试返回到主菜单使用 performSegueWithIdentifier: 这实际上会创建一个新的 View Controller 实例并将其推送到导航堆栈(并保留它的现有实例,从而导致内存问题)。

如果这确实是您的问题,解决方案非常简单:点击菜单按钮时,您应该调用 popViewControllerAnimateddismissViewControllerAnimated:completion: .

当您习惯了 iOS segueing 时,一件值得做的简单小事是向您的所有 View Controller 添加取消初始化器,如下所示,以便获得正在按预期释放对象的持续调试消息:

deinit {
debugPrintln("Name_of_view_controlled deinitialized...")
}

圣帕迪节快乐!

关于ios - Swift:当我转到另一个 View Controller 时,内存未清除,收到内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112756/

25 4 0
文章推荐: html - 如何使用 CSS(无 javascript)添加文本或字符?
文章推荐: php - 如何在 Zend\Db (Zend Framework 2) 中处理多对多关系
文章推荐: jquery - 如何强制隐藏+空的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com