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
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
Java singleton deseni uygulamak için e...
't neden C# Statik Yöntemler bir ...
Nasıl factory method deseni uygulamak ...
Neden Google'EĞER bir WordPress k...
Neden apple-touch-icon-precomposed içi...