单例的两种写法

来源:互联网 发布:mac a1181 t7200 编辑:程序博客网 时间:2024/06/08 18:40
单例的特点:
1,内存中只有一个唯一的副本
2,GCD写法的效率比自旋锁效率快很多

   long largeNumber = 1000 *1000;
   
    // 1.dispatch_once
   CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
    for (long i= 0; i < largeNumber; ++i) {
       [xxxx sharedDemo];
    }
   NSLog(@"dispatch_once %f", CFAbsoluteTimeGetCurrent() -start);
   
    // 2.互斥锁
    start =CFAbsoluteTimeGetCurrent();
    for (long i= 0; i < largeNumber; ++i) {
       [xxxx syncDemo];
    }
    NSLog(@"互斥锁%f", CFAbsoluteTimeGetCurrent() - start);


xxxx.h文件:
//GCD实现单例
+ (instancetype)sharedDemo;

//互斥锁实现单例
+ (instancetype)syncDemo;


//GCD
xxxx.m 文件:
+ (instancetype)sharedDeno{

static id instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
instance = [[self alloc]init];
});

//互斥锁
+ (instancetype)syncDemo{
static id  sync;
@synchronized(self) {
      if (sync == nil){
          sync = [[self alloc]init];
      }
  }
return sync;


0 0
原创粉丝点击