Защо текущият код с безкраен цикъл 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
}
}
По този начин не блокираме главния поток и използваме системните механизми за повтарящи се действия.