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];
No comments:
Post a Comment