Sobes.tech
Middle+

Барои ба даст овардани назорати максималӣ бар рӯйдодҳо дар iOS чӣ метавонад истифода шавад?

sobes.tech AI

Ҷавоб аз AI

Барои назорати максималӣ дар ҷараёнҳо дар iOS метавонед истифода баред:

  1. Thread: Класс дар сатҳи паст, ки дар болои ҷараёнҳои системӣ (pthreads) сохта шудааст. Имкон медиҳад, ки мустақиман ҷараёнҳоро эҷод кардан, оғоз кардан, боздоштани онҳо ва афзалиятҳоро идора кардан. Ниёз ба идоракунии дастӣ дорад.

    // Намунаи эҷод ва оғоз кардани ҷараён
    let myThread = Thread {
        // Кормандӣ дар ҷараён
        print("Ҷараён оғоз шуд")
    }
    myThread.start()
    
  2. GCD (Grand Central Dispatch): API дар сатҳи паст барои идоракунии параллелизм. Имкон медиҳад кор бо қаторҳо (DispatchQueues):

    • Сериалӣ (Serial): вазифаҳо ба таври пайдарпай иҷро мешаванд.
    • Параллелӣ (Concurrent): вазифаҳо метавонанд параллелона дар дастрасӣ ба захираҳо иҷро шаванд.
    • Глобалӣ (Global): қаторҳои параллелии системӣ бо сатҳҳои гуногуни сифати хизматрасонӣ (QoS).

    GCD автоматӣ пулро идора мекунад, истифодаи захираҳои системиро оптимизатсия мекунад.

    // Намунаи иҷрои асинхронӣ дар қатор глобалӣ
    DispatchQueue.global(qos: .userInitiated).async {
        // Амали дароз
        print("Фармон дар пасзамина анҷом ёфт")
    }
    
    // Намунаи иҷрои вазифа дар қатор асосӣ
    DispatchQueue.main.async {
        // Навсозии UI
        print("UI навсозӣ шуд")
    }
    
  3. Operation ва OperationQueue: Абстраксияи баландтар аз GCD. Имкон медиҳад, ки амалҳоро (Operation) эҷод кунед, ки метавонанд дар қаторҳо (OperationQueue) ҷойгир шаванд. Имкониятҳо:

    • Таварруҳҳо байни амалҳо.
    • Бекор кардани амалҳо.
    • Приоритетҳо.
    • Назорат (KVO) дар ҳолати амалҳо (isReady, isExecuting, isFinished, isCancelled).

    OperationQueue метавонад ҳам бо қаторҳои сериалӣ ва ҳам параллелӣ кор кунад.

    // Намунаи эҷод ва илова кардани амал ба қатор
    class MyOperation: Operation {
        override func main() {
            if isCancelled { return }
            print("Амали оғоз шуд")
            // Кор дароз
            if isCancelled { return }
            print("Амали анҷом ёфт")
        }
    }
    
    let operationQueue = OperationQueue()
    let op1 = MyOperation()
    let op2 = MyOperation()
    
    op2.addDependency(op1) // op2 пас аз op1 иҷро мешавад
    
    operationQueue.addOperation(op1)
    operationQueue.addOperation(op2)
    

Интихоб байни Thread, GCD ва Operation Blocs/Queues вобаста ба сатҳи назорат, мураккабии вазифа ва эҳтиёҷоти иловагӣ, масалан, таварруҳҳо ё бекор кардан, мебошад. Thread дар рушди муосири iOS камтар истифода мешавад, зеро идоракунии он душвор аст. GCD ва Operation Queues асбобҳои афзалиятнок мебошанд. GCD нисбатан пасттар ва чандир барои вазифаҳои асинхрон оддӣ аст, дар ҳоле ки Operation Queues барои сценарияҳои мураккаб бо таварруҳҳо бештар сохторӣ мебошанд.