¿Por qué no bucle infinito en didSet?

En mi FirstViewController tengo un botón que dirige a mi SecondViewController, pasando datos a una propiedad en SecondViewController. Esta propiedad tiene un observador de propiedades, que crea una nueva instancia de SecondViewController cuando se establece.

Mientras funciona como quiero, me pregunto por qué no se queda atascado en un bucle infinito, creando una instancia de SecondViewController para siempre. ¿Y es una buena práctica hacerlo de esta manera?

FirstViewController:

class FirstViewController: UIViewController {
    @IBAction func something(sender: UIButton) {
        let destination = storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as SecondViewController
        destination.selected = 1
        showViewController(destination, sender: self)
    }
}

SecondViewController:

class SecondViewController: UIViewController {
    var selected: Int = 0 {
        didSet {
            let destination = storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as SecondViewController
            destination.selected = selected
            showViewController(destination, sender: self)
        }
    }

    @IBAction func something(sender: UIButton) {
        selected = 2
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta