swift – 克隆节点时SceneKit泄漏

swift – 克隆节点时SceneKit泄漏,第1张

概述我有一个资源加载和缓存单例定义如下: class AssetLoader { fileprivate var rootNodes = Dictionary<String, SCNNode>() static let sharedInstance = AssetLoader() fileprivate init() { } func rootNode(_ 我有一个资源加载和缓存单例定义如下:

class AssetLoader {    fileprivate var rootNodes = Dictionary<String,SCNNode>()    static let sharedInstance = AssetLoader()    fileprivate init() {    }    func rootNode(_ named: String) -> SCNNode {        if self.rootNodes[named] != nil {            return self.rootNodes[named]!.clone()        } else {            let scene = SCNScene(named: "art.scnassets/\(named).scn")            self.rootNodes[named] = scene!.rootNode            return self.rootNodes[named]!.clone()        }    }}

我用它来让我的场景建设更快.我正在从扩展创建资产:

extension CAAnimation {    class func animationWithScene(named: String) -> CAAnimation? {        uNowned let rootNode = AssetLoader.sharedInstance.rootNode(named)        var animation: CAAnimation?        rootNode.enumerateChildNodes({ (child,stop) in            if child.animationKeys.count > 0 {                animation = child.animation(forKey: child.animationKeys.first!)                stop.initialize(to: true)            }        })        return animation    }}extension SCNNode {    class func nodeWithScene(named: String) -> SCNNode? {        uNowned let rootNode = AssetLoader.sharedInstance.rootNode(named)        let node = SCNNode()        for child in rootNode.childNodes {            node.addChildNode(child)        }        node.eulerAngles = SCNVector3(x: float(-M_PI_2),y: 0,z: 0)        node.scale = SCNVector3Make(kMeshScale,kMeshScale,kMeshScale)        return node    }}

乐器说我在每次调用clone()时都会疯狂地泄漏内存.我试图在没有造成崩溃的情况下尽可能使用弱而无主,并且它不会改变任何东西.有人有线索吗?这是SceneKit中的错误吗?

谢谢

解决方法 如果我理解正确,您将原始节点保存在AssetLoader的rootNodes字典中,并返回rootNode func中的那些节点的克隆.

我的架构类似,我的问题如下:当我从场景树中删除克隆节点时,内存将不会被释放.那是你的问题吗?

我修复了这个问题,在我的单例中添加了一个“unload”函数,以便在从场景树中删除克隆节点时使原始节点无效.这解决了我的记忆问题.

使用您的代码看起来像:

func unloadRootNode(_ named: String) {    rootNodes.removeValue(forKey: named)}
总结

以上是内存溢出为你收集整理的swift – 克隆节点时SceneKit泄漏全部内容,希望文章能够帮你解决swift – 克隆节点时SceneKit泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1016833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存