单例创建 dispatch_once  @synchronized

1、@synchronized

static InstanceClass *instance;

+ (InstanceClass *)defaultInstance{
   @synchronized (self){
     if (instance == nil) {
        instance = [[InstanceClass alloc] init];
     }
    }

   return instance;
}

2、GCD

static InstanceClass *instance;

+ (InstanceClass *)defaultInstance{
   static dispatch_once_t onceToken;
   dispatch_once
(&onceToken, ^{
     instance
= [[InstanceClass alloc] init];
   });
   return
instance;
}

两种方式都能起到线程安全的作用,尤其是在多cpu的环境下
posted @ 2013-08-13 17:04  SEC.VIP_网络安全服务  阅读(102)  评论(0编辑  收藏  举报