SORU
23 AĞUSTOS 2012, PERŞEMBE


Anlayış NSRunLoop

Herkes NSRunLoop ne olduğunu açıklayabilir mi? NSRunLoop bir şey NSThread bağlı bildiğim kadarıyla, değil mi? Böyle bir İplik oluşturmak varsayalım

NSThread* th=[[NSThread alloc] initWithTarget:self selector:@selector(someMethod) object:nil];
[th start];

-(void) someMethod
{
    NSLog(@"operation");
}

bu konuyu çalışma hakkı bittikten sonra? neden kullanıldığı yerler RunLoops Kullanım ya ? Apple docs bir şeyler okudum ama net benim için, lütfen Basit olarak açıklamak mümkün değil

CEVAP
23 AĞUSTOS 2012, PERŞEMBE


Çalışma döngüsü (diğer şeyler arasında) sistemi işlemek için bir mekanizma sağlar bir soyutlama giriş kaynakları (yuva, limanlar, dosya, klavye, fare, zamanlayıcılar, vb.).

Her NSThread currentRunLoop yöntemi ile erişilebilen kendi çalışma döngüsü vardır.

Genel olarak, g/Ç işlemi için kullanacaklarını belirlemek için izin olabilir (ağ) bazı bileşenler olmasına rağmen çalıştırın döngü doğrudan erişmek için gerekmez.

Bir döngü çalıştırmak için belirli bir iş parçacığı olacak bekleyin bir veya daha fazla giriş kaynağı vardır bazı veri veya olay, ardından ateş uygun giriş işleyicisi(ler) işlemi her bir giriş kaynağı "hazır.".

Bunu yaptıktan sonra, daha sonra döngü için, çeşitli kaynaklardan girdi işleme, ve "eğer iş ise yok". uyku dönecektir

Bu oldukça yüksek bir seviye açıklama (çok fazla ayrıntı önlemek için çalışıyoruz.

EDİT

Bir girişim yorum adres için. Parçalar halinde kırdım.

  • sadece/iplik döngü içinde çalıştırmak için erişim çalıştırabilirsiniz anlamına gelir değil mi?

Gerçekten. NSRunLoop iş parçacığı güvenli değil, ve sadece döngü çalışan iş parçacığı bağlamında erişilebilir olmalıdır.

  • olay döngüsü çalıştırmak için eklemek için nasıl basit bir örnek var mı ?

Eğer bir bağlantı noktası izlemek istiyorsanız, sadece bir kaç döngü için bu bağlantı noktası ekleyin ve çalıştırın döngü aktivite için port izlerdi.

- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode

Ayrıca bir zamanlayıcı ile açıkça ekleyebilirsiniz

- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
  • daha sonra döngü dönecektir ne demek?

Çalışma döngü tüm hazır olaylar her yineleme süreci (moda göre). Bu genel bir cevap kapsamı dışında bir şey olarak çalıştır modları hakkında keşfetmek için belgelerine bakmak gerekir.

  • iplik başladığımda çalıştırın döngü etkin değil mi?

Çoğu uygulamada, ana çalışma döngüsü otomatik olarak çalışır. Ancak, çalışma döngü başlıyor ve ipler için gelen olaylar için spin yanıt sorumludur.

  • olası bir iş Parçacığı çalıştırmak için döngü bazı olayları eklemek için konu dışında mı?

Burada ne demek emin değilim. Çalışma döngü olayları ekleme yapamazsınız. Giriş kaynakları ve zamanlayıcı kaynakları (run loop sahibi olan iş parçacığı) ekleyin. Çalışma döngü aktivite için onları izler. Tabii ki, diğer iş ve işlemler veri giriş sağlayabilirsiniz, ama giriş çalıştırın döngü çalışan iş parçacığı üzerinde bu kaynakları izleme çalışma döngü tarafından işlenir.

  • bazen koşmak döngü bir kez iplik engellemek için kullanabileceğim anlamına mı geliyor

Gerçekten. Aslında, çalışacak bir döngü "olay işleyicisi döndü. kadar" bir olay işleyicisi kalacak Herhangi bir uygulama bu yeterli görebilirsiniz. Uyumayan bir G / Ç işlemi (örneğin, bir düğmeye basın) için bir işleyici yüklemek. Bu yöntem kadar döngü (ve tüm UI) tamamlar ana çalışma engeller.

Aynı herhangi bir çalışma döngü için geçerlidir.

Çalışma döngüsü: aşağıdaki belgeleri okumanız tavsiye ederim

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsrunloop_Class/Reference/Reference.html

ve nasıl konuları içinde kullanılır:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • LatinNinja99

    LatinNinja99

    28 EKİM 2011
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011