Чаро коде ҳозира бо циклҳои беохири for дар main кор намекунад? Чӣ гуна онро ислоҳ кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Агар дар main-и барномаи iOS як доираи беохир for бошад, барнома кор намекунад, зеро равзанаи асосӣ бо ҳамин доира баста мешавад ва наметавонад ҳодисаҳои UI ва паёмҳои системаро коркард кунад.
Дар iOS, доираи ҳодисаҳои асосӣ (run loop) аз ҷониби системаи идора карда мешавад ва баста кардани равзанаи асосӣ ба сард шудани интерфейс оварда мерасонад.
Барои ислоҳи вазъият, бояд доираи беохирро аз main хориҷ кард ва системаро иҷозат дод, ки доираи ҳодисаҳоро идора кунад. Агар лозим бошад, вазифаҳои такрорӣ иҷро кардан, беҳтар аст, ки аз таймерҳо (Timer), қаторҳои пасзамина (DispatchQueue) ё дигар механизмҳои асинхронӣ истифода баред.
Маслиҳати нодуруст:
func main() {
for { // доираи беохир
// чизе мекунем
}
}
Тарзи дуруст:
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
// вазифаи такрорӣ
}
return true
}
}
Бо ин роҳ, мо равзанаи асосиро банд намекунем ва механизмҳои системаро барои иҷрои вазифаҳои такрорӣ истифода мебарем.