单例设计模式

iOS之单例设计模式

单例

单:惟一性。例:实例对象。就是使用某个类建立的对象是程序中惟一的实例对象。(一般每次使用alloc建立的是不一样的对象)web

若是一个类只能建立一个对象,称为单例类,能够工具类,视图类,控制器类设计模式

特色:全局均可以被访问到,操做单例对象的变量不会被释放,每次获取的对象都是同一个对象,只建立一次多线程

建立:建立单例对象的方法,通常都为类方法,命名规则为share+类名 或者 standard+类名工具

注意: (1)操做单例对象的变量存储在静态区,程序关闭后由系统自动回收 (2)单例对象存储在堆区,不释放,程序关闭后由系统自动回收 (3)变量与单例对象的生命周期与程序同步性能

优点: (1)在内存中只有一个对象,节省内存空间 (2)避免频繁的建立销毁对象,能够提升性能 (3)避免对共享资源的多重占用 (4)能够全局访问 (5)下降模块之间的藕合度,下降代码的复杂度spa

伪单例与完整单例

根据须要咱们实现的单例有伪单例和完整单例两种:线程

伪单例:只有经过该方法获取到的才是同一对象,通常状况下咱们本身的单例类多采用伪单例的建立方式,不须要实现完整的单例设计

@implementation DataHandle
static DataHandle *handle = nil;

+(DataHandle *)shareInstance
{
    //@synchronized为同步锁,在该大括号的代码段在多线程的时候受保护,一次只可以有一个线程执行,当多个线程访问改单例的时候,后面的等待!!!
    @synchronized(self){
        if(nil == handle)//判断以前是否开辟了空间
        {
            //当建立完整的单例,要避免死循环的问题
            handle = [[DataHandle alloc]init];
        }
    }
    return handle;
}

完整单例:不只经过特定方法获取到的是同一对象,进行alloc copy mutlcopy获取到的也是同一个对象,就须要咱们重写这些方法作一些内部实现code

例如:SingleTon为单例名对象

static SingleTon *singleTon = nil;
+(SingleTon *)shareSingleTon
{
    @sychronized{
        if(singleTon == nil)
        {
            singleTon = [super allocWithZone:nil]init];
        }
    }
}
+ (instancetype)alloc
{
        return [SingleTon shareSingTon];
}


+(instancetype)allocWithZone:(struct _NSZone *)zone
{
    return [SingleTon shareSingTon];
}

-(id)copy
{
    return [SingleTon shareSingTon];
}

-(id)mutableCopy
{
    return [SingleTon shareSingTon];
}
-(oneway void)release
{
    //    返回值为空,不作任何操做
}

-(NSUInteger)retainCount
{
    //    返回整形最大数
    return NSUIntegerMax;
}
相关文章
相关标签/搜索