Memory leaks 集合视图单元格中的SpriteKit内存泄漏

Memory leaks 集合视图单元格中的SpriteKit内存泄漏,memory-leaks,sprite-kit,uicollectionview,ios8.3,skview,Memory Leaks,Sprite Kit,Uicollectionview,Ios8.3,Skview,我正在使用SpriteKit在UICollectionView的UICollectionViewCell中制作动画。场景中有一个精灵,我正在使用SKAction制作它的动画。每个单元格的contentView都有自己的SKView/SKScene。我遇到了内存泄漏。当我在Xcode 6.3中的分配工具中看到这一点时,我看到每个新单元都有一对大于1MB的分配,一个分配归因于“SKView set_context”,另一个分配归因于allocateWCMemory GLEngine” 在每个UICo

我正在使用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) 现在我又添加了动画,但我只做了一个循环。我一直在做重复的动画(同一个动画,只是重复,由计时器控制)。当我只执行一次并停止时,没有内存泄漏。因此,问题似乎源于我的重复动画。

如果不查看代码,很难判断,但有一件事你应该查找: 您的任何SKActions是否包含指向
self
的块?如果是,可能会导致保留周期。在这种情况下,您需要获得
指向
self
的引用(Swift和Objective C之间会有所不同,但两者都需要)
可以在中找到一个很好的解释(以及适当的Swift示例)。

此内存泄漏似乎与SpriteKit或集合视图几乎没有关系。我在模态视图控制器中演示UICollectionView,而这(目标C)模态有一个问题,似乎只有在将其桥接到Swift时才出现。包含模态视图的控制器未解除分配。因此,它包含的对象(如UICollectionView,以及其中的SKView/SKScene)未解除分配

该模态来自UINavigationController。使用连接到Swift的Objective-C类,我发现有必要在行中添加:

// popupNavController is the UINavigationController used to present the modal view controller
self.popupNavController.viewControllers = nil;

当我取消模式时。

那么每个单元格都有一个SKView/SkScene?Sprite工具包确实不支持多个场景实例。必须有更好的方法来实现您正在尝试的操作。谢谢@Epic Byte。您能给我看一个苹果文档,说明不支持多个场景实例吗?@EpicByte如果我愿意的话使用SpriteKit和UICollectionView,例如,对于Tic Tac Toe游戏,这是不可能的?我想在我的
UICollectionViewCell中有一个sprite
这就是我所拥有的。每个单元格的SKView(嗯,在SKScene)上有一个SKSpriteNode。我没有涉及到self的SKActions。