ios 单例(arc版本)

来源:互联网 发布:计算机算法视频教程 编辑:程序博客网 时间:2024/06/11 12:39
我们知道C++等语言只要通过静态对象的检测并把构造函数,赋值构造函数声明为私有成员函数就可以实现单例了。
oc也是这个原理,但是oc没有构造函数的概念,那是不是通过定义全局的静态类实例了,再接口的每次判断该实例变量是否初始化就可以了:

static singleObject *instanse;

@implementation singleObject

+(singleObject*)shareObject{
    @synchronized(self){
        if (instanse == nil) {
            instanse = [super allocWithZone:NULL];
        }
    }
    return instanse;
}

但是通过如下的调用:
singleObject *obj1 = [singleObject  shareObject];
singleObject *obj2 = [[singleObject  alloc] init];
你会发现obj1和obj2的地址并不相同!所以我们得想办法覆盖掉alloc以copy函数:

+(id)allocWithZone:(struct _NSZone *)zone{
    return [self shareObject];
}

-(id)copyWithZone:(NSZone *)zone{
    return self;
}

在测试一下,看obj1和obj2的地址是不是一样!
@end 
0 0
原创粉丝点击