SORU
17 ŞUBAT 2012, Cuma


PerformSelectorOnMainThread arasındaki fark ana sıra dispatch_async nedir?

Sorunları bir iş parçacığı içinde bir görünüm değiştirme geçiriyordum. Bir küme eklemeye çalıştım ama ekran 6 ya da daha fazla saniye sürdü. Sonunda çalışma var, ama tam olarak ne olduğunu bilmiyorum. İşe yaradı neden ve aşağıdaki yöntemleri arasında ne fark vardır: bu yüzden merak ediyorum

//this worked -added the view instantly
dispatch_async(dispatch_get_main_queue(), ^{
    //some UI methods ej
    [view addSubview: otherView];
}

//this took around 6 or more seconds to display
[viewController performSelectorOnMainThread:@selector(methodThatAddsSubview:) withObject:otherView
 waitUntilDone:NO];

//Also didnt work: NSNotification methods -  took also around 6 seconds to display
//the observer was in the viewController I wanted to modify
//paired to a method to add a subview.
[[NSNotificationCenter defaultCenter] postNotificationName:
 @"notification-identifier" object:object];

Başvuru için bu ACAccountStore sınıfın bu Completetion İşleyicisi içinde çağrıldı.

accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
            if(granted) {
            //my methods were here
            }
}

Edit: işe yaramadı derken yaklaşık 6 ekledim görüntülemek için saniye sürdü demek istedim.

CEVAP
17 ŞUBAT 2012, Cuma


Varsayılan olarak, -performSelectorOnMainThread:withObject:waitUntilDone: sadece varsayılan programları çalıştırmak için seçiciyi döngü modunda çalıştırın. Eğer çalıştırmak döngü başka bir modda (izleme modu gibi) ise, çalışma döngü varsayılan moduna geçer kadar çalışmaz. Varyant -performSelectorOnMainThread:withObject:waitUntilDone:modes: (içinde çalıştırmak istediğiniz tüm modları geçerek) ile bunun üstesinden gelebilirsiniz.

Diğer taraftan, dispatch_async(dispatch_get_main_queue(), ^{ ... }) bloğu en kısa sürede ana Çalıştır olarak çalışır döngüye döner olay akışı döngü tekrar kontrol edin. Modlar hakkında hiçbir şey umurunda değil. Eğer öyleyse modlar ilgilenmeye istemiyorsan eğer ... ya da, dispatch_async() gitmek için iyi bir yol olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010