加载usdz文件时出现内存问题

时间:2019-06-19 11:40:12

标签: ios swift memory-management arkit usdz

我正在将.usdz文件加载到我的ARSCNView中,到目前为止,它可以正常工作,除了以下事实:当我将多个对象加载到场景中时,应用程序崩溃并显示消息:由于内存问题而终止。

我使用的是苹果默认的.usdz示例(https://developer.apple.com/augmented-reality/quick-look/),并且机器人文件的大小约为13.5MB。

它最多可用于4-5个实例,然后崩溃。

ARKit应用程序的限制是否很小,还是我做错了什么?

这是我的代码:

// My touch point on the screen
let touchLocation = sender.location(in: sceneView)    

// We have a touch point on an ARPlane
if let result = self.sceneView.hitTest(touchLocation, types: ARHitTestResult.ResultType.existingPlaneUsingExtent).last {

    let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)

    // Load the .usdz model        
    guard let usdzURL = Bundle.main.url(forResource: "toy_robot_vintage", withExtension: "usdz") else {
        return
    }

    // Create a node, set position and scale
    let referenceNode = SCNReferenceNode(url: usdzURL)!
    referenceNode.load()
    referenceNode.position = position
    referenceNode.scale = SCNVector3Make(0.01, 0.01, 0.01)

    // Add node to scene
    sceneView.scene.rootNode.addChildNode(referenceNode)
}

1 个答案:

答案 0 :(得分:0)

应用程序可以分配一定数量的内存,如果超出分配范围,它将被操作系统自动杀死。 我在iPhone 6S上测试了一个简单的ARKit应用,添加了一个约13.5MB大小的usdz文件,使该应用的内存使用量增加了约280MB,该应用的内存限制为1.37GB,如Xcode的内存报告中所示部分:

enter image description here

您可以看到每次将相同的usdz文件再次添加到场景时内存使用量如何增加。 因此,从技术上讲,您不能(并且可能不应)同时向您的应用添加多个usdz文件。