Principal
Proč současný kód s nekonečnou smyčkou for v main nefunguje? Jak to opravit?
sobes.tech AI
Odpověď od AI
Pokud v main iOS aplikace je nekonečná smyčka for, aplikace nefunguje, protože hlavní vlákno je touto smyčkou zablokováno a nemůže zpracovávat události UI a systémové zprávy.
V iOS je hlavní smyčka událostí (run loop) řízena systémem a její zablokování způsobí zamrznutí rozhraní.
Chcete-li situaci opravit, je třeba odstranit nekonečnou smyčku z main a nechat systém řídit smyčku událostí. Pokud je třeba provádět opakující se úkoly, je lepší použít časovače (Timer), fronty na pozadí (DispatchQueue) nebo jiné asynchronní mechanismy.
Příklad nesprávného kódu:
func main() {
for { // nekonečná smyčka
// něco děláme
}
}
Správný pří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 způsobem neblokujeme hlavní vlákno a používáme systémové mechanismy pro opakující se akce.