Привет У меня была реализация предыдущих версий прошивкой для одноточечного следующим образом:Синглтон в iOS 5?
.h файл
@interface CartSingleton : NSObject
{
}
+(CartSingleton *) getSingleton;
.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];
}
Однако в Интернете я вижу, люди реализовали шаблон модели Singleton с использованием этого кода:
+ (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;
}
Может ли кто-нибудь, кто имеет опыт, посоветуйте мне. Я новичок и полностью запутался между старой реализацией iOS Синглтона и новой, и которая является правильной?
спасибо
См http://stackoverflow.com/questions/5720029/create-singleton-using-gcds-dispatch-once-in-objective-c для более современный, более простой, но все же потокобезопасный. –