我正在使用 SpriteKit 在 UICollectionView 中的 UICollectionViewCell 中制作动画。该场景有一个我正在使用 SKAction 制作动画的精灵。每个单元格的 contentView 都有自己的 SKView/SKScene。我遇到了内存泄漏。当我在 Xcode 6.3 的分配工具中查看这个时,我看到每个新单元格都有一对 > 1MB 的分配,一个归因于“SKView set_context”,另一个归因于 allocateWCMemory GLEngine”。
在每个 UICollectionViewCell 中,它都是非常标准的东西。我正在创建其他(与动画无关的)UIView 子视图并将它们添加到 contentView。
一件奇怪且可能相关的事情是我没有得到一致调用的 UICollectionViewCell 的 deinit 方法。
想法?
更新:
1)这似乎与动画直接相关,与集合视图无关。如果我只是关闭代码的动画部分,我似乎没有得到内存泄漏。或者至少没有那么多内存泄漏。在这种情况下,SKScene/SKView 仍然被分配(每个集合视图单元格),但我只是不为精灵设置动画。我还应该补充一点,在这种情况下,禁用动画后,我的所有解除分配断点都会命中它们应该命中的位置(例如,UICollectionViewCell deinit 方法)。
2) 现在我已经重新添加了动画,但我只循环了一次。我一直在做重复的动画(相同的动画,只是重复,用计时器控制)。当我只做一次并停止时,没有内存泄漏。所以,这个问题似乎源于我重复的动画。