我有一个资源加载和缓存单例定义如下:
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中的错误吗?
谢谢
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。