Sobes.tech
Principal

Warum funktioniert der aktuelle Code mit einer unendlichen for-Schleife in main nicht? Wie kann man das beheben?

sobes.tech KI

Antwort von AI

Wenn im main einer iOS-Anwendung eine unendliche for-Schleife steht, funktioniert die Anwendung nicht, weil der Haupt-Thread durch diese Schleife blockiert wird und keine UI- oder Systemnachrichten verarbeiten kann.

Auf iOS wird die Haupt-Ereignisschleife (run loop) vom System verwaltet, und das Blockieren des Haupt-Threads führt zu einem Einfrieren der Oberfläche.

Um das Problem zu beheben, sollte die unendliche Schleife aus main entfernt werden, und das System sollte die Ereignisschleife verwalten dürfen. Wenn wiederholende Aufgaben notwendig sind, ist es besser, Timer (Timer), Hintergrundwarteschlangen (DispatchQueue) oder andere asynchrone Mechanismen zu verwenden.

Beispiel für falschen Code:

func main() {
    for { // unendliche Schleife
        // etwas tun
    }
}

Korrekte Vorgehensweise:

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
            // periodische Aufgabe
        }
        return true
    }
}

Auf diese Weise blockieren wir den Haupt-Thread nicht und verwenden die systemeigenen Mechanismen für wiederkehrende Aktionen.