iOS 单例实践。

iOS 单例实践。

1.什么是单例

单例是一种设计模式,他是为了解决在整个程序中只存在一个实例。比如对数据操作数据,就可以使用单例模式。在OC中系统提供两种单例类,NSNotificationCenter & NSFileManager。

2.单例的特点

2.1 他就像c语言中的全局变量

2.2 在整个程序的生命周期内只有一个实例存活。

2.3 可以通过单例来共享数据

3.单例的写法

一般单例的初始化不要使用alloc copy等方法创建,默认的写法是以shared* | default | current** 方法为开头创建。

单例的设计思想是,在初始化实例时候,如果对象不存在则创建,如果存在直接返回存在的。

最基础的写法;

staic id shareMyManger;

+ (id)sharedThemeManger
{
    if(shareMyManger == nil){
        shareMyManger = [[[self class] alloc] init];
    }
    return shareMyManger;
}

考虑线程安全

利用synchronized关键字,

staic id shareMyManger;

+ (id)sharedThemeManger
{    
    @synchronized(self){
        if(shareMyManger == nil){
            shareMyManger = [[[self class] alloc] init];
        }
    }
    return shareMyManger;
}

利用GCD创建

+ (id)sharedThemeManger
{    
    static dispatch_once_t thm;
    // 保证blocks的回调只有一次.
    dispatch_onc(&thm, ^){
            if(shareMyManger == nil){
            shareMyManger = [[[self class] alloc] init];
        }
     }
    return shareMyManger;
}

为了程序的健壮性重写下面这几个方法,如果是ARC的话 后面三个方法不需要重写。

+ (id)copyWithZone:(NSZone *)zone{
    return self;
}
+ (id)allocWithZone:(NSZone *)zone{
    return [ClassA sharedThemeManger];
}

- (void)retain{

}
- (void)release{

}
- (void)autorelease{

}

JackSun

继续阅读此作者的更多文章

comments powered by Disqus