Showing posts with label Design Pattern. Show all posts
Showing posts with label Design Pattern. Show all posts

Friday, 1 April 2016

Singleton Class


One of the most used design patterns for developing  iOS application. It's a way to share data between different part of code without having to pass the data around manually.

Singleton is a design pattern that restricts the instantiate of a class to one object. A singleton class returns the same instance no matter how many times an application requests.

Implementation
Create a sub class of NSObject(named: DatabaseHandler)

#import <Foundation/Foundation.h>

@interface DatabaseHandler : NSObject 
     
     +(DatabaseHandler *) sharedInstance
@end


#import "DatabaseHandler.h"

static DatabaseHandler *sharedInstance;
@implementation DatabaseHandler

#pragma mark -
+(DatabaseHandler *) sharedInstance{
   
    @synchronized(self){
       
        if (!sharedInstance) {
            sharedInstance = [[DatabaseHandler alloc] init];
        }
    }
    return sharedInstance;
}

@end

We can declare properties and methods in Singleton class as same like other classes.

 code:

#import <Foundation/Foundation.h>

@interface DatabaseHandler : NSObject 
        @property (nonatomic, strong) NSString *stringValue;
        @property (nonatomic, assign) BOOL check;

       
        +(DatabaseHandler *) sharedInstance
        -(void) initialization;
        -(void) fetchResult;
@end

 goto DatabaseHandler.m

#import "DatabaseHandler.h"

static DatabaseHandler *sharedInstance;
@implementation DatabaseHandler

#pragma mark -
+(DatabaseHandler *) sharedInstance{
   
    @synchronized(self){
       
        if (!sharedInstance) {
            sharedInstance = [[DatabaseHandler alloc] init];
        }
    }
    return sharedInstance;
}


//Initialization at time of creation object(if want to do any operation or set default value, its totally optional)
-(id) init{
    [self initialization];
}
 -(void) initialization{
     check = NO;
     stringValue = @"defaultValue";
}

-(void) fetchResult{
      NSLog(@"Fetch Call");
}
@end


Access to Singleton class methods and properties from outside(another classes)

1)import singleton class.

2) create object for singleton class
DatabaseHandler *databaseHandler = [DatabaseHandler sharedInstance];

3) Set value to property declared in Singleton class
databaseHandler.stringValue = @"New Value";
in the same way
databaseHandler.check = YES;

4) Get value from property declared in Singleton class
NSString *value = databaseHandler.stringValue;
BOOL check = databaseHandler.check;

5)Call methods declared in Singleton class
[databaseHandler fetchResult];