Bir çalışma döngüsü, sistemin eşzamansız olayları yönetebilmeleri için uyku iş parçacıklarını uyandırmasına izin veren bir mekanizmadır. Normalde bir iş parçacığı çalıştırdığınızda (ana iş parçacığı haricinde) iş parçacığını bir çalışma döngüsünde başlatıp başlatmama seçeneği vardır. İş parçacığı, harici olaylarla etkileşim olmadan ve zamanlayıcılar olmadan bir tür veya uzun süreli işlem çalıştırırsa, bir çalışma döngüsüne ihtiyacınız yoktur, ancak iş parçacığınızın gelen olaylara yanıt vermesi gerekiyorsa, bir çalışma döngüsüne eklenmelidir. yeni olaylar geldiğinde ileti dizisini uyandırın. Durum buNSURLConnection
yalnızca gelen olaylarda (ağdan) uyandıkları için oluşturulan iş parçacıkları .
Her iş parçacığı, birden çok çalıştırma döngüsüyle ilişkilendirilebilir veya farklı modlarda çalışmak üzere ayarlanabilen belirli bir çalıştırma döngüsüyle ilişkilendirilebilir. "Çalıştırma döngüsü modu", işletim sistemi tarafından belirli olayların ne zaman teslim edileceğine veya daha sonra teslim edilmek üzere toplanacağına ilişkin bazı kurallar oluşturmak için kullanılan bir konvansiyondur.
Genellikle tüm çalıştırma döngüleri, girdi olaylarını yönetmek için varsayılan bir yol oluşturan "varsayılan moda" ayarlanır. Örneğin: bir fareyle sürükleme (Mac OS) veya dokunma (iOS'ta) olayı gerçekleşir gerçekleşmez bu çalıştırma döngüsünün modu olay izleme olarak ayarlanır; bu, iş parçacığının yeni ağ olaylarında uyandırılmayacağı, ancak bu olayların daha sonra kullanıcı giriş olayı sona erdiğinde ve çalıştırma döngüsü tekrar varsayılan moda ayarlandığında teslim edileceği anlamına gelir; Açıkçası bu, işletim sistemi mimarları tarafından arka plan olayları yerine kullanıcı olaylarına öncelik vermek için yapılan bir seçimdir.
İş NSURLConnection
parçacığınız için çalıştırma döngüsü modunu kullanarak değiştirmeye karar verirseniz scheduleInRunLoop:forModes:
, iş parçacığını belirli varsayılan çalıştırma döngüsü yerine özel bir çalıştırma döngüsü moduna atayabilirsiniz . Çağrılan özel sözde mod NSRunLoopCommonModes
, olay izleme dahil birçok girdi kaynağı tarafından kullanılır. Örneğin, NSURLConnection
örneğini ortak moda atamak , olaylarını "varsayılan moda" ek olarak "izleme modu" ile ilişkilendirmek anlamına gelir. Konuları ilişkilendirmenin bir avantajı / dezavantajıNSRunLoopCommonModes
, iş parçacığının dokunma olayları tarafından engellenmemesidir.
Ortak modlara yeni modlar eklenebilir, ancak bu oldukça düşük seviyeli bir işlemdir.
Birkaç not ekleyerek kapatmak istiyorum:
Tipik olarak bir tablo görünümüyle ağdan indirilen bir dizi resim veya küçük resim kullanmamız gerekir. Tablo görünümü kaydırılırken bu görüntüleri ağdan indirmenin kullanıcı deneyimini iyileştirebileceğini düşünebiliriz (çünkü kaydırma sırasında görüntüleri görebiliyorduk), ancak kaydırmanın akışkanlığı büyük ölçüde zarar görebileceğinden bu avantajlı değildir. Bu örnekte NSURLConnection
bir çalıştırma döngüsü kullanılmamalıdır; UIScrollView
kaydırmanın ne zaman sonlandırıldığını tespit etmek için temsilci yöntemlerini kullanmak ve ardından tabloyu güncellemek ve ağdan yeni öğeler indirmek daha iyi olacaktır ;
Kodunuzu çalıştırma döngüsü yönetimi sorunlarından "korumanıza" yardımcı olacak GCD kullanmayı düşünebilirsiniz. Yukarıdaki örnekte, ağ isteklerinizi özel bir seri kuyruğa eklemeyi düşünebilirsiniz.