Xcode : Programmation => singleton

lundi 14 avril 2014

Singleton est un design pattern qui permet de restreindre l’instanciation d’une classe à un objet ou bien à quelques objets seulement.
Ce modèle est fort utilisé quand on a besoin de faire interagir un seul objet dans tout le système.
Son principe repose sur une classe contenant une méthode qui crée une instance uniquement s’il n’en existe pas encore.
Voici un exmeple, classe Device utile pour regrouper les informations générale du device:

Dans le.h

@interface Device : NSObject

@property CGFloat screenWidth;
@property CGFloat screenHeight;

- (id)init;
+(Device*)sharedInstance;

Dans le.m

@synthesize screenHeight,screenWidth;
static Device * shared = nil;

- (id)init{
    if ( self = [super init] )
    {
        CGRect screenBound = [[UIScreen mainScreen] bounds];
        CGSize screenSize = screenBound.size;
        screenWidth = screenSize.width;
        screenHeight = screenSize.height;
    }
    return self;
}

+(Device*)sharedInstance{
    @synchronized(shared)
    {
        if ( !shared || shared == NULL )
        {
            // allocate the shared instance, because it hasn't been done yet
            shared = [[Device alloc] init];
        }
            
        return shared;
    }
}

On peut même dans cette classe allé rechercher les paramètres de l’application (settings.bundle), comme ça on recherche ces valeurs une seul fois.

Version Swift, dans le .swift

class Manager : NSObject{
   static let sharedInstance = Manager()
   private let uuid : NSUUID
   override init() {
        self.uuid = NSUUID(UUIDString: self.uuidString)!
        super.init()
  }
}

Pour l’initialisation de l’objet:

self.Manager = Manager.sharedInstance

On peut initialiser un singleton juste en appelant le singleton sharedinstance.

Tags: Objective C , singleton