我正在编写一个存在明显泄漏/内存分配问题的 tvOS 应用程序。自 Swift 3 和 tvOS 10 更新以来,我注意到大量内存问题。该应用程序应该连续运行数天/数周,并且使用 Swift 2 和 tvOS 9,它运行良好。现在,我的应用程序运行了 2-3 天并崩溃了。一个多星期以来,我一直在办公桌前敲打我的头。
我已经使用 Instruments 来诊断和解决我的大部分(如果不是全部)泄漏,但我的应用程序中的内存使用量仍然缓慢上升。尽管 Instruments 显示没有泄漏,但 XCode 中的内存使用跟踪器仍然显示内存缓慢而稳定地上升。我一直在使用 Instruments 跟踪分配,并发现了一些奇怪的东西:
1) 当我将 SKCropNode 添加到 SKSpriteNode 时,我的 Persistent bytes 和 # 迅速上升。
var cropNode: SKCropNode!
func prepare() {
let node = SKSpriteNode()
node.anchorPoint = self.anchorPoint
node.size = self.frame.size
node.color = UIColor.black
self.cropNode = SKCropNode()
self.cropNode.maskNode = node
self.addChild(self.cropNode)
}
2)当我关闭场景时,我添加了许多措施来清理所有内容,但同样,持久字节和 # 继续上升。我在适当的地方使用弱引用。
func exit() {
let fadeAction = SKAction.fadeAlpha(to: 0.0, duration: 0.35)
self.run(fadeAction, completion: { [weak self] in
self?.removeAllActions()
self?.removeAllChildren()
self?.view?.presentScene(nil)
self?.removeFromParent()
self?.view?.removeFromSuperView()
})
}
我的问题是:
从旧版本更新时,是否有人在 Xcode 8、Swift 3 或 tvOS 中遇到过内存问题?
有人对我上面列出的问题有任何解释或解决方案吗?
提前致谢 :)