Bir çalıştırma döngüsü, (diğer şeylerin yanı sıra) sistem giriş kaynaklarını (soketler, bağlantı noktaları, dosyalar, klavye, fare, zamanlayıcılar vb.) İşlemek için bir mekanizma sağlayan bir soyutlamadır.
Her NSThread'in, currentRunLoop yöntemi ile erişilebilen kendi çalışma döngüsü vardır.
Genel olarak, G / Ç işleme için hangi çalışma döngüsünü kullanacaklarını belirlemenize olanak tanıyan bazı (ağ oluşturma) bileşenleri olsa da, çalıştırma döngüsüne doğrudan erişmeniz gerekmez.
Belirli bir iş parçacığı için bir çalışma döngüsü, giriş kaynaklarından bir veya daha fazlasının bazı veri veya olaylara sahip olmasını bekler, ardından "hazır" olan her bir giriş kaynağını işlemek için uygun giriş işleyicilerini çalıştırır.
Bunu yaptıktan sonra, kendi döngüsüne geri dönecek, çeşitli kaynaklardan gelen girdileri işleyecek ve yapılacak bir iş yoksa "uyuyacak".
Bu oldukça yüksek seviyeli bir tanımdır (çok fazla ayrıntıdan kaçınmaya çalışmak).
DÜZENLE
Yorumu ele alma girişimi. Parçalara ayırdım.
- bu sadece iş parçacığı içinde döngü çalıştırmak için erişebileceğim / çalıştırabileceğim anlamına mı geliyor?
Aslında. NSRunLoop iş parçacığı için güvenli değildir ve yalnızca döngüyü çalıştıran iş parçacığının bağlamından erişilmelidir.
- Döngüyü çalıştırmak için olay eklemenin nasıl basit bir örneği var?
Bir bağlantı noktasını izlemek istiyorsanız, bu bağlantı noktasını çalıştırma döngüsüne eklemeniz yeterlidir ve ardından çalıştırma döngüsü, etkinlik için bu bağlantı noktasını izler.
- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode
Ayrıca şununla açıkça bir zamanlayıcı da ekleyebilirsiniz:
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
- daha sonra kendi döngüsüne döneceği anlamına gelir?
Çalıştırma döngüsü, her yinelemede tüm hazır olayları işleyecektir (moduna göre). Genel bir yanıtın kapsamının biraz ötesinde olduğundan, çalıştırma modlarını keşfetmek için belgelere bakmanız gerekecektir.
- iş parçacığını başlattığımda run döngüsü devre dışı mı?
Çoğu uygulamada, ana çalıştırma döngüsü otomatik olarak çalışacaktır. Ancak, döndürdüğünüz iş parçacıkları için çalıştırma döngüsünü başlatmak ve gelen olaylara yanıt vermekten siz sorumlusunuz.
- İş parçacığı dışındaki iş parçacığı çalışma döngüsüne bazı olaylar eklemek mümkün mü?
Burada ne demek istediğinden emin değilim. Çalıştırma döngüsüne olay eklemezsiniz. Giriş kaynakları ve zamanlayıcı kaynakları eklersiniz (çalışma döngüsüne sahip olan iş parçacığından). Çalıştırma döngüsü daha sonra etkinlik için onları izler. Elbette, diğer iş parçacıkları ve işlemlerden veri girişi sağlayabilirsiniz, ancak girdi, çalıştırma döngüsünü çalıştıran iş parçacığı üzerindeki kaynakları izleyen çalıştırma döngüsü tarafından işlenecektir.
- bazen iş parçacığını bir süreliğine engellemek için çalıştırma döngüsünü kullanabileceğim anlamına mı geliyor
Aslında. Aslında, bir çalışma döngüsü, olay işleyicisi dönene kadar olay işleyicisinde "kalacaktır". Bunu herhangi bir uygulamada yeterince basit bir şekilde görebilirsiniz. Uyuyan herhangi bir IO eylemi (örneğin, düğmeye basma) için bir işleyici kurun. Bu yöntem tamamlanıncaya kadar ana çalıştırma döngüsünü (ve tüm kullanıcı arayüzünü) engelleyeceksiniz.
Aynısı herhangi bir çalışma döngüsü için de geçerlidir.
Çalıştırma döngüleri ile ilgili aşağıdaki belgeleri okumanızı öneririm:
https://developer.apple.com/documentation/foundation/nsrunloop
ve konu başlıklarında nasıl kullanıldıkları:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1