Sobes.tech
Middle

Grand Central Dispatch чист ва чӣ гуна дар таҳияи iOS истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Тартибии марказии Гранд (GCD) — API-и пасти сатҳ барои идоракунии бисёрсоҳавӣ, ки пуле аз сӯрохиҳои системиро таъмин мекунад ва иҷрои вазифаҳоро дар онҳо нақша мебандад.

Концепсияҳои асосии GCD:

  • Қатори фиристодан: Қаторҳое, ки блокҳои коди (вазифаҳоро) барои иҷро ҷойгир мекунанд.
    • Қаторҳои силсилавӣ: Блокҳоро дар тартиби илова кардан, як ба як, иҷро мекунанд.
    • Қаторҳои ҳамзамон: Блокҳоро параллелӣ иҷро мекунанд, аммо дар тартиби илова кардан.
  • Вазифаҳо (Блокҳо): Ҳуҷҷатҳои кор, ки ба Қатори фиристодан фиристода мешаванд.
  • Манбаъҳои фиристодан: Мониторинг кардани ҳодисаҳои системӣ (файлҳо, сӯрохиҳо, сигналиҳо), ки иҷрои блокҳоро дар вақти пайдоиши онҳо даъват мекунанд.

Истифода:

  1. Иҷрои вазифаҳои пасзамина: Боргирии маълумот аз шабака, коркарди тасвирҳо, ҳисобҳои мураккаб, то ки сӯрохи асосӣ (UI) баста нашавад.

    DispatchQueue.global(qos: .userInitiated).async {
        // Иҷрои амалиёти вазнин
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // Навсозии UI дар сӯрохи асосӣ
            updateUI(with: processedData)
        }
    }
    
  2. Нақшабандии вазифаҳо: Иҷрои таъхиршуда ё иҷрои даврӣ.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Ин код пас аз 2 сония иҷро мешавад
        print("Иҷрои таъхиршуда")
    }
    
  3. Муносибати дастрасӣ ба маълумотро ҳамоҳанг кардан: Истифодаи қаторҳои силсилавӣ ё DispatchQueue.concurrentPerform барои назорати дастрасии параллелӣ.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // Истифодаи .barrier барои дастрасии истисноӣ дар навишт
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // Хондани синхронӣ
            for item in sharedArray {
                print(item)
            }
        }
    }
    

Бартарӣ нисбат ба идоракунии дастӣ дар сӯрохиҳо (POSIX threads):

  • Осонтар истифода: Дар сатҳи баланди абстраксия.
  • Самаранокӣ: GCD беҳтар менежмент мекунад пуле аз сӯрохиҳои системӣ, кам кардани хароҷот.
  • Масштабшавандагӣ: Автоматӣ ба шумораи ядроҳои процессор мутобиқ мешавад.

Намудҳои QoS (сифати хизматрасонӣ): Маъно дорад, ки вазифа барои нақшакаш GCD афзалият дорад.

QoS Истифода
userInteractive Навсозии UI, анимацияҳо, вокуниши зуд
userInitiated Вазифаҳое, ки аз ҷониби корбар оғоз мешаванд, ва ниёз доранд ба анҷоми зуд (боргирӣ, коркарди аксҳо)
default Афзалиятии пешфарзӣ, байни userInitiated ва utility
utility Вазифаҳое, ки дарозмуддат иҷро мешаванд, бе таъҷилӣ (боргирӣ, индекссозӣ)
background Вазифаҳое, ки дар пасзамина иҷро мешаванд, барои корбар намоён нест (нусхабардорӣ, ҳамоҳангсозӣ дар пасзамина)
unspecified Афзалият муайян нашудааст, онро системаи муайян мекунад