【发布时间】:2015-03-18 01:35:46
【问题描述】:
我正在 Xcode 6.2 中为 iOS 8.1 构建应用程序。我有一个UIViewController (LevelViewController),其中包含一个UICollectionView,其每个单元格都代表我游戏中的一个级别(每个单元格都有一个带有数字的标签)。一旦选择了其中一个单元格,我就会对SKScene 执行显示转场,该SKScene 会加载该特定级别的所有数据。我还有一个“菜单”按钮,它执行返回主菜单的显示转场。
从功能上讲,这一切都有效,但是在执行两个 segue 后我遇到了严重的记忆问题。在查看仪器后,似乎当我从LevelViewController 中分离出来时,我为每个人添加的所有UILabel UICollectionViewCell 以及单元格中包含的所有其他内容都保留在内存中。应该只有 192 个标签(对于 192 个级别),但在多次执行此 segue 之后,它们在仪器中加起来约为 1000 个。
显然这些并没有在内存中被释放,我的理解是 swift 应该解决这个问题,所以我不确定问题是什么。我还应该注意UICollectionView 是以编程方式添加的,并且没有使用IBOutlets。
那么,当我远离LevelViewController 时,我究竟如何才能摆脱这些标签,以及真正的UICollectionView 本身。我对此感到非常困惑,这毁了我的圣帕特里克节。所以为了爱爱尔兰人,请帮助一个小伙子:)
注意:我尝试过的方法
self.collectionView.removeFromSuperView()
self.collectionView = nil
self.collectionView.deleteItemsAtIndexPaths(path)
【问题讨论】:
-
我建议你使用 unwind segue,因为你的应用是基于故事板的。对于您的特定情况,它提供了更多的一致性,而不是使用 popViewCONtrollerAnimated。
标签: ios swift memory xcode6 uicollectionview