+(id)allocWithZone:(NSZone * )zone  //重写父类的alloc方法 
{ 
    //懒汉式: 
//    if (_instance==nil) { 
//        @synchronized(self){        //加锁 
//            if(_instance==nil){ 
//                _instance=[[self alloc]init]; 
//            } 
//        } 
//    } 
    //GCD模式 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^{ 
        _instance=[[super allocWithZone:zone]; 
    }); 
    return _instance;    
} 
+(instancetype)sharedDatatool    //判断_instance属性是否为空,若为空,则加线程锁,           //防止其他线程同时访问,再次判断_instance是                   //        否为空,若为空,则为其分配内存空间 
{ 
     
    //懒汉式: 
//    if(_instance==nil){ 
//        @synchronized (self){ 
//            if(_instance==nil){ 
//                _instance=[[[self alloc]init]; 
//            } 
//        } 
//    } 
    //GCD模式   
  static dispatch_once_t onceToken; 
    dispatch_once(&onceToken,^{ 
        _instance=[[self alloc]init]; 
    }); 
      return _instance; 
} 
-(id)copyWithZone:(NSZone *)zone             //重写父类的copy方法,使该方法                                //直接返回属性值,不再对属性做        //处理,防止外部利用copy方法实        //现对_instance的篡改 
{ 
    return _instance; 
} |   
        
 
    
    
    
     
 
 |