Hola tenía una implementación de versiones anteriores de iOS para un producto único de la siguiente manera:Singleton en iOS 5?
archivo .h
@interface CartSingleton : NSObject
{
}
+(CartSingleton *) getSingleton;
archivo .m
@implementation CartSingleton
static CartSingleton *sharedSingleton = nil;
+(CartSingleton *) getSingleton
{
if (sharedSingleton !=nil)
{
NSLog(@"Cart has already been created.....");
return sharedSingleton;
}
@synchronized(self)
{
if (sharedSingleton == nil)
{
sharedSingleton = [[self alloc]init];
NSLog(@"Created a new Cart");
}
}
return sharedSingleton;
}
//==============================================================================
+(id)alloc
{
@synchronized([CartSingleton class])
{
NSLog(@"inside alloc");
NSAssert(sharedSingleton == nil, @"Attempted to allocate a second instance of a singleton.");
sharedSingleton = [super alloc];
return sharedSingleton;
}
return nil;
}
//==============================================================================
-(id)init
{
self = [super init];
}
Sin embargo en la web veo que la gente han puesto en práctica el patrón de diseño de Singleton que utiliza este código:
+ (id)sharedInstance
{
static dispatch_once_t pred = 0;
__strong static id _sharedObject = nil;
dispatch_once(&pred, ^{
_sharedObject = [[self alloc] init]; // or some other init method
});
return _sharedObject;
}
Podría alguien que es la experiencia por favor guíame. Soy un novato y estoy completamente confundido entre la antigua implementación de iOS de Singleton y la nueva y ¿cuál es la correcta?
Muchas gracias
Ver http://stackoverflow.com/questions/5720029/create-singleton-using-gcds-dispatch-once-in-objective-c de el más moderno, más simple pero aún seguro para hilos. Los bloques –