Sobes.tech
Principal

Защо текущият код с безкраен цикъл 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
    }
}

По този начин не блокираме главния поток и използваме системните механизми за повтарящи се действия.