Miért nem működik a jelenlegi kód a mainben lévő végtelen for ciklussal? Hogyan javítható?
sobes.tech MI
Válasz az MI-től
Ha az iOS alkalmazás main függvényében végtelen for ciklus van, az alkalmazás nem működik, mert a fő szálat ez a ciklus blokkolja, és nem tudja feldolgozni a UI eseményeket és a rendszerüzeneteket.
Az iOS-ben a fő eseményciklus (run loop) a rendszer által van kezelve, és a fő szál blokkolása a felület lefagyásához vezet.
A helyzet javítása érdekében el kell távolítani a végtelen ciklust a main-ből, és engedni kell a rendszernek, hogy kezelje az eseményciklust. Ha ismétlődő feladatokat kell végrehajtani, akkor jobb timereket (Timer), háttérsorokat (DispatchQueue) vagy más aszinkron mechanizmusokat használni.
Hibás kód példa:
func main() {
for { // végtelen ciklus
// valami csinálunk
}
}
Helyes megközelítés:
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
// ismétlődő feladat
}
return true
}
}
Így nem blokkoljuk a fő szálat, és a rendszer mechanizmusait használjuk az ismétlődő műveletekhez.