Динамически менять фон SCNView в Swift - PullRequest
0 голосов
/ 13 декабря 2018

Я создаю приложение для iOS, которое - в своей основной части - получает изображения JPEG кадр за кадром по TCP.

В другой части приложения есть 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, избегая утечек памяти?

1 Ответ

0 голосов
/ 14 декабря 2018

Одно решение будет использовать блок 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
        }
    }
}
...