Why does the planeNode in SceneKit flicker when using class property instead of a local variable?

I am working on a SceneKit project where I use a CAShapeLayer as the content for SCNMaterial's diffuse.contents to display a progress bar. Here's my initial code:

func setupProgressWithCAShapeLayer() {
    let progressLayer = createProgressLayer()
    progressBarPlane?.firstMaterial?.diffuse.contents = progressLayer
    
    DispatchQueue.main.async { 
        var progress: CGFloat = 0.0
        Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
            progress += 0.01
            if progress > 1.0 {
                progress = 0.0
            }
            progressLayer.strokeEnd = progress // Update progress
        }
    }
}

// MARK: - ARSCNViewDelegate
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        progressBarPlane = SCNPlane(width: 0.2, height: 0.2)
        setupProgressWithCAShapeLayer()
        let planeNode = SCNNode(geometry: progressBarPlane)
        planeNode.position = SCNVector3(x: 0, y: 0.2, z: 0)
        node.addChildNode(planeNode)
    }

This works fine, and the progress bar updates smoothly. However, when I change the code to use a class property (self.progressLayer) instead of a local variable, the rendering starts flickering on the screen:

func setupProgressWithCAShapeLayer() {
    self.progressLayer = createProgressLayer()
    progressBarPlane?.firstMaterial?.diffuse.contents = progressLayer
    
    DispatchQueue.main.async { [weak self] in
        var progress: CGFloat = 0.0
        Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] timer in
            progress += 0.01
            if progress > 1.0 {
                progress = 0.0
            }
            self?.progressLayer?.strokeEnd = progress // Update progress
        }
    }
}

After this change, the progressBarPlane in SceneKit starts flickering while being rendered on the screen.

My Question:

Why does switching from a local variable (progressLayer) to a class property (self.progressLayer) cause the flickering issue in SceneKit rendering?

Why does the planeNode in SceneKit flicker when using class property instead of a local variable?
 
 
Q