SORU
28 AĞUSTOS 2011, Pazar


NSDefaultRunLoopMode vs NSRunLoopCommonModes

Stackoverflow sevgili iyi insanlar

Tıpkı geçen seferki gibi, bu vesileyle, geçenlerde üzerine çamaşır gündeme getiriyoruz. Orada birisi bana biraz ışık tutabileceğini umuyorum.

Scrollview, mkmapview falan arkasında büyük bir dosya indirmeye çalıştığım zaman indirme işlemi en kısa sürede dokunmatik ekran iPhone gibi durdu alır. Neyse ki, Jörn harika bir blog post alternatif bir seçenek, bağlantı için NSRunLoopCommonModes kullanarak önerir.

Bana iki mod, NSDefaultRunLoopMode ve NSRunLoopCommonModes ayrıntı içine bak alır, ama apple belgeyi nazik, demekten başka bir açıklama yapmıyor

NSDefaultRunLoopMode

Giriş kaynakları ile başa çıkmak için modu NSConnection nesneleri dışında. Bu en yaygın olarak kullanılan çalışma döngü modu.

NSRunLoopCommonModes

Eklenen nesneler için bir çalışma döngü kullanarak bu değeri modu vardır takip ederek, tüm çalışma döngü modları olduğu bildirilen bir üyesi olarak kurulan “ortak" modları; bakınız açıklama CFRunLoopAddCommonMode için Ayrıntılar.

CFRunLoopAddCommonMode

Kaynaklar, zamanlayıcılar, ve gözlemci bir veya daha fazla döngü modları çalıştırmak ve çalıştırmak döngü bu moddan birinde çalışırken çalıştırmak sadece kayıtlı olsun. Ortak modları için hangi kaynakları, zamanlayıcılar, ve bu modlar tarafından paylaşılan gözlemci bir dizi tanımlayabilirsiniz çalıştırın döngü modları bir dizi vardır. Yerine kayıt kaynağı, örneğin, her biri belirli bir çalışma döngü modu, kayıt için bir kez Çalıştır döngü ortak sözde modu ve olacak otomatik olarak kayıtlı her çalışma döngü modunda ortak mod olarak ayarlayın. Bir mod ortak modları kümesi eklendiğinde aynı şekilde, herhangi bir kaynaktan, zamanlayıcılar, ya da gözlemciler zaten sözde modu ortak için kayıtlı yeni eklenen ortak modu eklenir.

Herhangi bir insan dilinde iki açıklayabilecek olan var mı?

CEVAP
28 AĞUSTOS 2011, Pazar


Çalışacak bir döngü sistemi zaman uyumsuz olayları yönetmek olabilir bu yüzden bu konuları uykudan uyanmak için izin veren bir mekanizmadır. Normalde bir konu (ana konu hariç) çalıştırmak ya da değil, bir döngü içinde iplik başlatmak için bir seçenek yoktur. Eğer iş parçacığı çalışır falan ya da uzun süren bir işlem olmadan etkileşim ile dış olaylar ve zamanlayıcılar olmadan, gerekmez bir çalışma döngü, ama eğer iplik ihtiyaçlarına cevap gelen olaylar, öyle olmalı bağlı bir döngü çalıştırmak için uyandırmak konu ne zaman yeni olaylar geliyor. Bu sadece gelen olaylar wake (ağ) NSURLConnection oluşturulan iş parçacığı durumu.

Her iş parçacığı, birden çok çalışma döngüsü ile ilişkili olabilir, ya da farklı çalışma modları için ayarlanabilir belirli bir döngü çalıştırmak için ilişkili olabilir. Bir "döngü modunda Çalıştır" Kongre, belirli olaylar ya da onları teslim sonra teslim edilecek toplamak için zaman için bazı kurallar kurmak için işletim sistemi tarafından kullanılır.

Genellikle tüm döngüler için ayarlanır "mod" varsayılan bir şekilde giriş olayları yönetmek için kurar. varsayılan çalıştırmak Örneğin: en kısa sürede bir fare tuşuna basıp (Mac OS) veya touch (iOS) olay olduktan sonra modu için bu döngü ayarlamak için olay izleme; yani, bu konu olmayacak uyandı yeni ağ olayları ama bu olaylar olacak teslim sonra kullanıcı giriş olay sona erer ve çalışma döngü ayarlamak için varsayılan modu tekrar; belli ki bu bir seçim yapılmış OS mimarlar önem vermek kullanıcı olaylar yerine arka plan olaylar.

NSURLConnection iplik çalıştırmak için döngü modunu değiştirmek için karar verirseniz, scheduleInRunLoop:forModes:, kullanarak, daha sonra özel bir döngü çalıştırmak için ip atayabilirsinizmodbelirli varsayılan çalışma döngü yerine. Sözde mod özel NSRunLoopCommonModes denilen olay izleme de dahil olmak üzere birçok giriş kaynakları tarafından kullanılır. Örneğin NSURLConnectionatama'ortak mod demek associates örnek olaylar s "izleme modu" ek olarak "varsayılan mod". NSRunLoopCommonModes konuları ile ilişkilendirme dezavantajı/avantajı iplik dokunma olayları yüzünden kapalı olacak.

Yeni modlar ortak modları eklenebilir, ama bu düşük seviyeli bir işlem gayet basittir.

Kapatmak için bir kaç not eklemek istiyorum:

  • Genellikle görüntüleri bir dizi ya da kullanmamız gerekiyor küçük bir tablo görünümü ile ağdan indirilebilir. Bunu düşünebiliriz tablo görünümünde iken ağdan bu görüntüleri indiriyor kaydırma kullanıcı deneyimi (görüntüleri görebiliriz süreden beri artırabilirsiniz kaydırma), ama bu yana avantajlı değil akışkanlığını kaydırma çok acı olabilir. Bu örnek ile NSURLConnection bir çalışma döngü kullanılmamalıdır; böylesi daha iyi kullanmak için UIScrollView temsilci yöntemleri tespit edebilme zaman kaydırma sonlandırıldı ve sonra update tablo ve indir yeni öğeler ağ;

  • "Kod Kalkan yardımcı olacak GCD kullanarak düşünebilirsiniz döngü yönetimi konularında çalışacak. Yukarıdaki örnekte olabilir Özel seri bir sıraya ağ isteklerinize eklemeyi düşünün.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • Liz Morgan

    Liz Morgan

    4 Aralık 2011

İLGİLİ SORU / CEVAPLAR