什么是单例模式
单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在 iOS 开发中,单例模式是非常有用的一种设计模式。如 下图,是一个简单单例模式的 UML 类图。
images/loading.gif' data-original="http://images2015.cnblogs.com/blog/886976/201601/886976-20160126205334160-1710671255.png" />
iOS SDK 中也有许多类使用了单例模式,例如,UIApplication:当程序启动的 时候,会调用 UIApplicationMain 方法,在该方法中,会实例化一个 UIApplication 对象,之后在程序中的任意地方调用 sharedApplication 方法都将返回一个与当前应用程序相关的 UIApplication 实例(UIApplicationMain 方法中创建的 UIApplication 单例)。
#import "DMSingletion.h"
static DMSingletion *_dmSingletion = nil;
@implementation DMSingletion
+(id)sharedDmSingletion
{
if (_dmSingletion == nil) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_dmSingletion=[[DMSingletion alloc] init];
});
}
return _dmSingletion;
}
//重写alloc 方法 即便是使用alloc 的方法 也该方法只执行一次
+(instancetype)alloc
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_dmSingletion = [super alloc];
});
return _dmSingletion;
}
#import "ViewController.h"
#import "DMSingletion.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self textGCDSingletion];
[self textGCDRewWriteAlloc];
}
-(void)textGCDSingletion
{
//创建第一个对象
DMSingletion *firstObject = [DMSingletion sharedDmSingletion];
//创建第二个对象
DMSingletion *secondObject = [DMSingletion sharedDmSingletion];
NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject);
}
-(void)textGCDRewWriteAlloc
{
//创建一个对象
DMSingletion *firstObject = [DMSingletion sharedDmSingletion];
DMSingletion *secondObject = [[DMSingletion alloc] init];
NSLog(@"\nfirstObject:%@\nsecondObject:%@",firstObject,secondObject);
}
@end
原标题:GCD实现简单的单例类
关键词: