Sobes.tech
Principal

Waarom werkt de huidige code met een oneindige for-lus in main niet? Hoe kun je dit corrigeren?

sobes.tech AI

Antwoord van AI

Als in de main van een iOS-app een oneindige for-lus staat, werkt de app niet omdat de hoofdthread wordt geblokkeerd door deze lus en geen UI- of systeemgebeurtenissen kan verwerken.

Op iOS wordt de hoofdgebeurtenislus (run loop) beheerd door het systeem, en het blokkeren van de hoofdthread leidt tot een vastgelopen interface.

Om dit op te lossen, moet je de oneindige lus uit main verwijderen en het systeem de gebeurtenislus laten beheren. Als je herhalende taken moet uitvoeren, is het beter om timers (Timer), achtergrondwachtrijen (DispatchQueue) of andere asynchrone mechanismen te gebruiken.

Voorbeeld van onjuiste code:

func main() {
    for { // oneindige lus
        // iets doen
    }
}

Correcte aanpak:

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
            // periodieke taak
        }
        return true
    }
}

Op deze manier blokkeren we de hoofdthread niet en gebruiken we de systeemmechanismen voor herhaalde acties.