黑马程序员技术交流社区

标题: 分别用GCD和懒汉式实现单例方法,这是我自学总结的,有错误的希望大家能够指出 [打印本页]

作者: 1158865593    时间: 2015-7-25 00:55
标题: 分别用GCD和懒汉式实现单例方法,这是我自学总结的,有错误的希望大家能够指出
+(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;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2