Principal
Miks praegune kood, millel on lõpmatu for-tsükkel main'is, ei tööta? Kuidas seda parandada?
sobes.tech AI
Vastus AI-lt
Kui iOS rakenduse main osas on lõpmatu for tsükkel, siis rakendus ei tööta, sest peamine niit on selle tsükli tõttu blokeeritud ning ei suuda töödelda UI sündmusi ega süsteemi sõnumeid.
iOS-is hallatakse peamist sündmuste tsüklit (run loop) süsteemi poolt ning selle blokeerimine põhjustab liidese hangumise.
Probleemi lahendamiseks tuleb eemaldada main-ist lõpmatu tsükkel ning lasta süsteemil hallata sündmuste tsüklit. Kui on vaja teha korduvaid ülesandeid, on parem kasutada ajastajaid (Timer), taustajärjekordi (DispatchQueue) või muid asünkroonseid mehhanisme.
Vale koodi näide:
func main() {
for { // lõpmatu tsükkel
// midagi teeme
}
}
Õige lähenemine:
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
// perioodiline ülesanne
}
return true
}
}
Sel viisil ei blokeeri me peamist niiti ning kasutame süsteemi mehhanisme korduvate tegevuste jaoks.