SORU
2 ŞUBAT 2012, PERŞEMBE


Neden Apple ARK altında singleton deseni uygulamak için dispatch_once kullanmak için önerilir?

ARK altında bir singleton paylaşılan örneği erişimci içinde dispatch_once kullanarak tam sebebi nedir?

  (MyClass *)sharedInstance
{
    //  Static local predicate must be initialized to 0
    static MyClass *sharedInstance = nil;
    static dispatch_once_t onceToken = 0;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[MyClass alloc] init];
        // Do any other initialisation stuff here
    });
    return sharedInstance;
}

Bu kötü bir fikir singleton arka planda uyumsuz oluşturmak değil mi? Örnek paylaştı ve hemen güveniyor, ama dispatch_once yılbaşına kadar sürer istersem ne olacak benim nesne oluşturmak için? Hemen teslim değil mi? En azından Grand Central bütün mesele Gönderme gibi görünüyor.

Bunu neden yapıyorlar?

CEVAP
2 ŞUBAT 2012, PERŞEMBE


dispatch_once() kesinlikle senkron. Tüm GCD şeyler yöntemleri zaman uyumsuz olarak (örnek, dispatch_sync() senkron). dispatch_once() kullanımı aşağıdaki deyim değiştirir:

  (MyClass *)sharedInstance {
    static MyClass *sharedInstance;
    @synchronized(self) {
        if (sharedInstance == nil) {
            sharedInstance = [[MyClass alloc] init];
        }
    }
    return sharedInstance;
}

Bu üzerinde dispatch_once() avantajı daha hızlı olmasıdır. dispatch_once() tüm fikir olduğu için de anlamsal temiz, "bir şey bir kez ve sadece bir kez yapıyoruz bu yüzden.", gerçekleştirmek

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009
  • ODN

    ODN

    26 Kasım 2006
  • SunsetTrance

    SunsetTrance

    20 EYLÜL 2008