İçeriğe geç

OperationQueue kullanımı

Merhabalar bu yazımda İOS uygulamalarında kullandığımız Thread yaratıcı GCD’lere ek olarak thread yaratabileceğiniz ve duruma göre daha avantajlı olacağınız sınıf OperationQueue kullanımına örnek vereceğim.

Daha önceki yazılarımda GCD ve paralel thread kullanımından bahsetmiştim. Direkt olarak OperationQueue’dan bahsedecek olursam GCD arasında farklar bulunmakta.

GCD, geliştiricilerin aynı anda görevleri yürütmesine olanak tanıyan düşük seviyeli bir C API’sıdır. İşlem sıraları, diğer taraftan, sıra modelinin üst düzey soyutlamasıdır ve GCD’nin üzerine inşa edilmiştir. Bu, görevleri eşzamanlı olarak GCD gibi yürütebileceğiniz, ancak nesne yönelimli bir biçimde yürütebileceğiniz anlamına geliyor. Kısacası, işlem kuyrukları geliştiricilerin hayatını daha basit hale getirmekte.

FİFO yapısına uymazlar (First-In-First-Out) İşlem sıralarında, işlemler için yürütme önceliği ayarlayabilir ve işlemler arasında bağımlılıklar ekleyebilirsiniz; bu, bazı işlemlerin yalnızca diğer işlemlerin tamamlanmasından sonra yürütüleceğini tanımlayabileceğiniz anlamına gelir. Thread işletilirken işlemi durdurabilir ve başlatabilirsiniz. İşlemlerin bittikten sonra kuyruğa hangi işlemin gireceğini ayarlayabilir. Dilediğiniz işlemi iptal edip ardındaki kuyruğun işlemesini sağlayabilirsiniz.

Kullanımına örnek verecek olursam.

   OperationQueue.main.addOperation {
            // code
        }

Kuyruklara dilediğiniz kadar BlockOperation ekleyebilir kontrol edebilirsiniz.

 let queue = OperationQueue()
      
        let operation_1 = BlockOperation.init {
            for _ in 0...1000 {
                print("1")
            }
        }
        
        let operation_2 = BlockOperation.init {
            for _ in 0...1000 {
                print("2")
            }
        }
        
        operation_1.completionBlock = {
            print("op_1 finish")
        }
        
        operation_2.completionBlock = {
            print("op_2 finish")
        }
        
        queue.addOperation(operation_1)
        queue.addOperation(operation_2)

Tüm operasyonları iptal edebilirsiniz.

queue.cancelAllOperations()

Operasyonlara bir birine bağlılık ekleyebiliyoruz buda Operations apisini özel yapan diğer bir noktalardan. Aşağıdaki örnek ile normalde ayrı koşması gereken kod bağlılık ekleyerek bağlandığı operasyon ardından koşar.

 let queue = OperationQueue()
      
        let operation_1 = BlockOperation.init {
            for _ in 0...10 {
                print("1")
            }
        }
        
        let operation_2 = BlockOperation.init {
            for _ in 0...10 {
                print("2")
            }
        }
        
        let operation_3 = BlockOperation.init {
            for _ in 0...10 {
                print("33")
            }
        }
        
        operation_2.addDependency(operation_1) // 1 finish start 2
        operation_1.addDependency(operation_3) // 3 finish start 1
        
        operation_1.completionBlock = {
            print("op_1 finish")
        }
        
        operation_2.completionBlock = {
            print("op_2 finish")
        }
        
        operation_3.completionBlock = {
            print("op_3 finish")
        }
        
        queue.addOperation(operation_1)
        queue.addOperation(operation_2)
        queue.addOperation(operation_3)

 

 

Tarih:SwiftSwift 3

Bu yazı yorumlara kapalı.

Copyright © 2021 Kenan Atmaca