Синглтон в iOS 5?

Привет, у меня была реализация предыдущих версий iOS для синглтона следующим образом:

.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 и новой, и какая из них правильная?

Большое спасибо

11
задан Pang 21 June 2013 в 09:21
поделиться