Sobes.tech
Principal

Por que o código atual com um ciclo infinito for no main não funciona? Como corrigir?

sobes.tech IA

Resposta da IA

Se no main de uma aplicação iOS houver um ciclo for infinito, a aplicação não funciona porque o thread principal fica bloqueado por esse ciclo e não consegue processar eventos de UI nem mensagens do sistema.

No iOS, o ciclo de eventos principal (run loop) é gerido pelo sistema, e bloquear o thread principal leva ao congelamento da interface.

Para corrigir a situação, deve-se remover o ciclo infinito do main e permitir que o sistema gerencie o ciclo de eventos. Se precisar realizar tarefas repetitivas, é melhor usar temporizadores (Timer), filas em segundo plano (DispatchQueue) ou outros mecanismos assíncronos.

Exemplo de código incorreto:

func main() {
    for { // ciclo infinito
        // fazer algo
    }
}

Abordagem correta:

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
            // tarefa periódica
        }
        return true
    }
}

Dessa forma, não bloqueamos o thread principal e usamos mecanismos do sistema para ações repetitivas.