单例创建的两种方法

单例的创建

//声明一个全局区的对象
//创建一个静态区的对象,原因是,它在内存中一直存在,这样对外界来说,可以随时读取数据
static DataHandle *dataHandle = nil;

//创建单例(伪单例)/*不是完整单例 */
+(instancetype)sharedDataHandle{
    
    if (nil == dataHandle) {
        //我们创建的单例使用 + 方法,原因是,在创建之前,无法存在一个实例对象去调用动态方法来创建它本身
        dataHandle = [DataHandle new];
    }
        
        return dataHandle;
  }
static Elite *elite = nil;

//两种创建单例的方法
+(instancetype)sharedElite{
    //第一种写法
//    @synchronized(self) {
//        if (nil == elite) {
//            
//            elite = [[Elite alloc]init];
//        }
//        return elite;
//    }
    //第二种写法
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken,^{
        elite = [[Elite alloc]init];
    });
    

    return elite;
    
}

你可能感兴趣的:(单例创建的两种方法)