Sobes.tech
Principal

Pourquoi le code actuel avec une boucle infinie for dans main ne fonctionne-t-il pas ? Comment le corriger ?

sobes.tech IA

Réponse de l'IA

Si dans le main d'une application iOS il y a une boucle for infinie, l'application ne fonctionne pas car le thread principal est bloqué par cette boucle et ne peut pas traiter les événements UI ni les messages système.

Sur iOS, la boucle d'événements principale (run loop) est gérée par le système, et bloquer le thread principal entraîne un gel de l'interface.

Pour corriger cela, il faut supprimer la boucle infinie du main et laisser le système gérer la boucle d'événements. Si vous devez effectuer des tâches répétitives, il est préférable d'utiliser des timers (Timer), des files d'attente en arrière-plan (DispatchQueue) ou d'autres mécanismes asynchrones.

Exemple de code incorrect :

func main() {
    for { // boucle infinie
        // faire quelque chose
    }
}

Approche correcte :

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
            // tâche périodique
        }
        return true
    }
}

Ainsi, on ne bloque pas le thread principal et on utilise les mécanismes du système pour les actions répétitives.