Sobes.tech
Principal

Dlaczego obecny kod z nieskończoną pętlą for w main nie działa? Jak to naprawić?

sobes.tech AI

Odpowiedź od AI

Jeśli w main aplikacji iOS znajduje się nieskończona pętla for, aplikacja nie działa, ponieważ główny wątek jest blokowany przez tę pętlę i nie może obsługiwać zdarzeń UI ani komunikatów systemowych.

Na iOS główna pętla zdarzeń (run loop) jest zarządzana przez system, a blokowanie głównego wątku powoduje zawieszenie interfejsu.

Aby naprawić sytuację, należy usunąć nieskończoną pętlę z main i pozwolić systemowi zarządzać pętlą zdarzeń. Jeśli trzeba wykonywać powtarzające się zadania, lepiej użyć timerów (Timer), kolejek w tle (DispatchQueue) lub innych mechanizmów asynchronicznych.

Przykład niepoprawnego kodu:

func main() {
    for { // nieskończona pętla
        // coś robimy
    }
}

Poprawne podejście:

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
            // zadanie okresowe
        }
        return true
    }
}

W ten sposób nie blokujemy głównego wątku i korzystamy z mechanizmów systemowych do powtarzających się działań.