在Swift中动态更改SCNView的背景

时间:2018-12-13 19:03:21

标签: ios swift memory-leaks scenekit arkit

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

应用程序的另一部分有一个ID SomeCol 1 Dog 2 Cat 3 Monkey ,需要从这些框架中动态设置背景。

我的伪代码如下:

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分配不断变化的背景,从而避免内存泄漏?

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用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
        }
    }
}