zoukankan      html  css  js  c++  java
  • 类工厂创建单例

                      步骤

    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

     推荐一

     
     
     
     
     
     
  • 相关阅读:
    利用Event和MapFile进程共享信息
    基于不可靠数据报的文件传输
    Simple .NET code and memory profiler
    一步一步Asp.Net MVC系列_权限管理之权限控制
    新的起点,新的开始
    找工作的你需要了解和准备的东西
    我的大学读书生涯
    一步一步Asp.Net MVC系列_权限管理数据库与ViewModel篇
    一步一步asp.net_日志导航
    一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4174165.html
Copyright © 2011-2022 走看看