• 类工厂创建单例


                      步骤

    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

     推荐一

     
     
     
     
     
     
  • 相关阅读:
    索引
    运算符优先级
    身份运算符
    成员运算符
    位运算符
    利用java编写物品的品牌、尺寸、价格、库存(新手)
    今天聊一聊nuxt.js(上)
    初入前端,面对一个项目应注意哪些?
    小型 Web 页项目打包优化方案
    跨域的那些事儿
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4174165.html
Copyright © 2020-2023  润新知