I have seen many people suggesting to use dispatch_once to do the singleton:
+(MyClass *)singleton {
static dispatch_once_t pred;
static MyClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
Why is this better when it doesn't really support true singleton, and people can still use init to create an instance and even do a release on the sharedInstance?
Apple's way is preventing all those cases http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html I know it is not thread-safe, but I think it is easy to put a synchronize block there to make it thread-safe.