Sobes.tech
Principal

Zašto trenutni kod sa beskonačnom for petljom u main ne radi? Kako to popraviti?

sobes.tech АИ

Одговор од АИ

Ако у main iOS aplikacije postoji beskonačna for petlja, aplikacija neće raditi jer se glavni tok blokira tom petljom i ne može obrađivati UI događaje i sistemske poruke.

Na iOS-u, glavni događajni ciklus (run loop) je pod kontrolom sistema, a blokiranje glavnog toka dovodi do zamrzavanja interfejsa.

Da biste rešili situaciju, potrebno je ukloniti beskonačnu petlju iz main i dozvoliti sistemu da upravlja događajnim ciklusom. Ako je potrebno izvršavati ponovljive zadatke, bolje je koristiti tajmere (Timer), pozadinske redove (DispatchQueue) ili druge asinhrone mehanizme.

Primer pogrešnog koda:

func main() {
    for { // beskonačna petlja
        // nešto radimo
    }
}

Pravi pristup:

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
            // periodični zadatak
        }
        return true
    }
}

Na ovaj način, ne blokiramo glavni tok i koristimo sistemske mehanizme za ponovljive radnje.