Sobes.tech
Principal

Kāpēc pašreizējais kods ar bezgalīgu for ciklu galvenajā funkcijā nedarbojas? Kā to labot?

sobes.tech AI

Atbilde no AI

Ja main funkcijā iOS lietojumprogrammā ir bezgalīga for cilpa, programma nedarbosies, jo galvenais pavedienu bloķē šī cilpa un tas nevar apstrādāt UI notikumus un sistēmas ziņojumus.

iOS galvenā notikumu cilpa (run loop) tiek pārvaldīta ar sistēmas, un tās bloķēšana noved pie saskarnes apstīšanas.

Lai novērstu situāciju, ir jānoņem bezgalīgā cilpa no main un jāļauj sistēmai pārvaldīt notikumu cilpu. Ja nepieciešams veikt atkārtotus uzdevumus, ir labāk izmantot taimerus (Timer), fonu rindas (DispatchQueue) vai citus asenhronus mehānismus.

Nepareizs koda piemērs:

func main() {
    for { // bezgalīga cilpa
        // kaut ko darām
    }
}

Pareizais pieejas veids:

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
            // atkārtots uzdevums
        }
        return true
    }
}

Šādā veidā mēs neblokējam galveno pavedienu un izmantojam sistēmas mehānismus atkārtotām darbībām.