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.