在 Swift 中动态更改 SCNView 的背景

Dynamically change background of SCNView in Swift

我正在制作一个 iOS 应用程序,其本质部分是通过 TCP 逐帧接收 JPEG 图像。

应用程序的另一部分有一个 ARSCNView,需要根据这些帧动态设置背景。

我的伪代码如下所示:

while(phase == 1) {
    let bytes = try tcpSocket.read(into: &jpegData)
    sceneView.scene.background.contents = UIImage(data: jpegData)

    // or the other way

    let bgempty = backgroundImage == nil
    backgroundImage = UIImage(data: jpegData)
    if(bgempty) {
       sceneView.scene.background.contents = backgroundImage
    }
}

差不多就这些了。无论哪种方式,此循环都会造成内存泄漏。当我使用 CGImage

时相同

如何为 ARSCNView 分配不断变化的背景,避免内存泄漏?

一种解决方案是使用 autoreleasepool 块。这可以确保内存占用保持最小。您使用的循环占用了大量设备内存,要优化此代码,您可以添加自动释放池,如下所示:

while(phase == 1) {
    autoreleasepool {
        let bytes = try tcpSocket.read(into: &jpegData)
        sceneView.scene.background.contents = UIImage(data: jpegData)

        // or the other way

        let bgempty = backgroundImage == nil
        backgroundImage = UIImage(data: jpegData)
        if(bgempty) {
            sceneView.scene.background.contents = backgroundImage
        }
    }
}