Bu benim de cevabım. Bu yüzden kullanım durumumuz hakkında konuşacağım.
Bir servis katmanımız ve UI katmanımız var (diğer katmanların yanı sıra). Hizmetler katmanı, görevleri arka planda çalıştırır. (Veri işleme görevleri, CoreData görevleri, Ağ çağrıları vb.). Hizmet katmanı, UI katmanının ihtiyaçlarını karşılamak için birkaç işlem kuyruğuna sahiptir.
UI katmanı, işini yapmak için hizmetler katmanına dayanır ve ardından bir başarı tamamlama bloğu çalıştırır. Bu bloğun içinde UIKit kodu olabilir. Basit bir kullanım örneği, sunucudan tüm mesajları almak ve koleksiyon görünümünü yeniden yüklemektir.
Burada, hizmetler katmanına aktarılan blokların, hizmetin çağrıldığı kuyrukta gönderileceğini garanti ediyoruz. Dispatch_get_current_queue kullanımdan kaldırılmış bir yöntem olduğundan, arayanın mevcut kuyruğunu almak için NSOperationQueue.currentQueue kullanırız. Bu mülkle ilgili önemli not.
Bu yöntemin çalışan bir işlemin bağlamının dışından çağrılması, genellikle nil döndürülmesiyle sonuçlanır.
Hizmetlerimizi her zaman bilinen bir kuyrukta (özel kuyruklarımız ve Ana sıramız) çağırdığımız için, bu bizim için iyi çalışıyor. ServisA'nın servisi arayabileceği ve servisi C arayabileceği durumlarımız var. İlk servis çağrısının nereden yapıldığını kontrol ettiğimiz için, diğer servislerin de aynı kurallara uyacağını biliyoruz.
Dolayısıyla, NSOperationQueue.currentQueue her zaman Kuyruklarımızdan birini veya MainQueue'yu döndürecektir.
dispatch_get_current_queue()
iOS 6'da kullanımdan kaldırıldı diyorsunuz ? dokümanlar bu konuda hiçbir şey söylemiyor