Sobes.tech
Middle+

iOS'ta akışlar üzerinde maksimum kontrol sağlamak için ne kullanılabilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS'ta işlemler üzerinde maksimum kontrol sağlamak için şu yöntemler kullanılabilir:

  1. Thread: Düşük seviyeli sınıf, sistem işlemleri (pthreads) üzerinde sarmalayıcı. Doğrudan işlem oluşturma, başlatma, durdurma ve öncelik yönetimi sağlar. Yaşam döngüsünün manuel yönetimini gerektirir.

    // İşlem oluşturma ve başlatma örneği
    let myThread = Thread {
        // İşlemde gerçekleştirilen çalışma
        print("Thread başlatıldı")
    }
    myThread.start()
    
  2. GCD (Grand Central Dispatch): Paralelleştirmeyi yönetmek için düşük seviyeli API. Kuyruklar (DispatchQueues) ile çalışma:

    • Seri (Serial): Görevler sıralı şekilde yürütülür.
    • Paralel (Concurrent): Görevler, kullanılabilir kaynaklar üzerinde paralel olarak yürütülebilir.
    • Küresel (Global): Farklı QoS seviyelerine sahip sistem genelinde paralel kuyruklar.

    GCD, sistem kaynaklarının kullanımını optimize etmek için otomatik olarak thread havuzunu yönetir.

    // Global kuyrukta asenkron görev yürütme örneği
    DispatchQueue.global(qos: .userInitiated).async {
        // Uzun süren işlem
        print("Arka plan görevi tamamlandı")
    }
    
    // Ana kuyrukta görev yürütme örneği
    DispatchQueue.main.async {
        // UI güncellemesi
        print("UI güncellendi")
    }
    
  3. Operation ve OperationQueue: GCD üzerinde yüksek seviyeli soyutlama. İşlemler (Operation) oluşturup bunları kuyruklara (OperationQueue) ekleyebilirsiniz. Özellikleri:

    • İşlemler arasında bağımlılıklar.
    • İşlemleri iptal etme.
    • İşlem öncelikleri.
    • İşlemin durumu için gözlemciler (KVO) (isReady, isExecuting, isFinished, isCancelled).

    OperationQueue, hem seri hem de paralel kuyruklar ile çalışabilir.

    // İşlem oluşturma ve kuyruğa ekleme örneği
    class MyOperation: Operation {
        override func main() {
            if isCancelled { return }
            print("İşlem başladı")
            // Uzun süren çalışma
            if isCancelled { return }
            print("İşlem tamamlandı")
        }
    }
    
    let operationQueue = OperationQueue()
    let op1 = MyOperation()
    let op2 = MyOperation()
    
    op2.addDependency(op1) // op2, op1'den sonra çalışır
    
    operationQueue.addOperation(op1)
    operationQueue.addOperation(op2)
    

Thread, GCD ve Operation Queue arasındaki seçim, gereken kontrol seviyesine, görevin karmaşıklığına ve bağımlılık veya iptal gibi ek fonksiyonlara bağlıdır. Modern iOS geliştirmede Thread nadiren kullanılır çünkü yönetimi zordur. GCD ve Operation Queues tercih edilen araçlardır. GCD, basit asenkron görevler için daha düşük seviyeli ve esnektir, Operation Queues ise bağımlılık içeren karmaşık senaryolar için daha yapılandırılmış bir yaklaşım sunar.