Principal
Prečo aktuálny kód s nekonečnou slučkou for v main ne funguje? Ako to opraviť?
sobes.tech AI
Odpoveď od AI
Ak v main iOS aplikácie je nekonečný cyklus for, aplikácia nefunguje, pretože hlavný vlákno je blokované týmto cyklom a nemôže spracovávať UI udalosti a systémové správy.
V iOS je hlavný cyklus udalostí (run loop) spravovaný systémom a jeho blokovanie spôsobí zamrznutie rozhrania.
Na opravu situácie je potrebné odstrániť nekonečný cyklus z main a nechať systém spravovať cyklus udalostí. Ak je potrebné vykonávať opakujúce sa úlohy, je lepšie použiť časovače (Timer), fronty na pozadí (DispatchQueue) alebo iné asynchrónne mechanizmy.
Príklad nesprávneho kódu:
func main() {
for { // nekonečný cyklus
// niečo robíme
}
}
Správny prístup:
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
// periodická úloha
}
return true
}
}
Týmto spôsobom neblokujeme hlavný vlákno a používame systémové mechanizmy na opakujúce sa akcie.