类工厂创建单例

                  步骤

1.声明一个单例对象的静态实例,并初始化为nil

2.在该类的类工厂方法(名称类似于shareInstance 、shareManager或以default为前缀)中生成该类的一个实例仅当静态实例为nil的时候

3.重载allocWithZone:方法,确保当前用户试图直接(而不是通过类工厂方法)分配或初始化类的实例时,不会分配出另一个对象。

4.实现基本的协议方法:copyWithZone、release、retain、retainCount和autoRelease,以保证单例的状态

以上为全部四个步骤,一般 3、4 无需理会。

           (推荐)常用实例写法一(ContactManager.h、ContactManager.m)

                       (block + 大中枢派发机制)

ContactManager.h:

@interface AddContactManager : NSObject

+ (AddContactManager*)defultManager;//类工厂方法

@end

ContactManager.m:

static AddContactManager *_defaultManagerInstance = nil; //静态实例
@implementation ContactManager

+(AddContactManager*)defultManager
{
    @synchronized(self) { //锁同步
        static dispatch_once_t pred;
        dispatch_once(&pred, ^{
            _defaultManagerInstance = [[self alloc] init];
        });
    }
    return _defaultManagerInstance;
}

//初始化
-(id)init
{
    self = [super init];
    if(self) {
    }
    return self;
}

@end

                                    常用实例写法二(ContactManager.h、ContactManager.m)

ContactManager.h:

@interface AddContactManager : NSObject

+ (AddContactManager*)defultManager;//类工厂方法

@end

ContactManager.m:

static AddContactManager *_defaultManagerInstance = nil; //静态实例
@implementation ContactManager

+(AddContactManager*)defultManager

{

    @synchronized(self) { //锁同步


        if(_defaultManagerInstance == nil){  

           _defaultManagerInstance = [[self alloc] init];

          }
    }
    return _defaultManagerInstance;

};

//初始化
-(id)init
{
    self = [super init];
    if(self) {
    }
    return self;
}

@end

 推荐一

 
 
 
 
 
 
原文地址:https://www.cnblogs.com/liuziyu/p/4174165.html