widziałem wątek bezpieczną wersjęJak poprawnie zaimplementować zgodną z ARC i bezpieczną dla użytkownika Singleton `alloc init`?
+(MyClass *)singleton {
static dispatch_once_t pred;
static MyClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
ale co by się stało, gdyby ktoś po prostu wywołuje [MyClass alloc] init]
? Jak sprawić, by zwrócił tę samą instancję, co metoda +(MyClass *)singleton
?
już robisz dispatch_once(), czy trzeba to zrobić, jeśli (! SingletonInstance)? Wierzę, że dispatch_once() obsłuży to dla nas na podstawie innych rzeczy, takich jak synchronizacja. – pnizzle
@pnizzle masz rację, dispatch_once wystarczy, sprawdzanie instancji wcześniej może być szybsze. –
Czy "allocWithZith:' przestarzałe? Wygląda na to, gdy próbuję to zaimplementować. – Fogh