你的位置:首页 > 操作系统

[操作系统]GCD实现简单的单例类


什么是单例模式

单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在 iOS 开发中,单例模式是非常有用的一种设计模式。如 下图,是一个简单单例模式的 UML 类图。

 



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