IOS单例模式(Singleton)

 

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

1.单例模式的要点:

  显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

2.单例模式的优点:

  1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
 
IOS中的单例模式
  在objective-c中要实现一个单例类,至少需要做以下四个步骤:
  1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
  2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
  3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
  4、适当实现allocWitheZone,copyWithZone,release和autorelease。
下面以SurveyRunTimeData为例子:
 
static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance  //第二步:实例构造检查静态实例是否为nil
{
    @synchronized (self)
    {
        if (sharedObj == nil)
        {
            [[self alloc] init];
        }
    }
    return sharedObj;
}

+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
    @synchronized (self) {
        if (sharedObj == nil) {
            sharedObj = [super allocWithZone:zone];
            return sharedObj;
        }
    }
    return nil;
}

- (id) copyWithZone:(NSZone *)zone //第四步
{
    return self;
}

- (id) retain
{
    return self;
}

- (unsigned) retainCount
{
    return UINT_MAX;
}

- (oneway void) release
{
    
}

- (id) autorelease
{
    return self;
}

- (id)init
{
    @synchronized(self) {
        [super init];//往往放一些要初始化的变量.
        return self;
    }
 
 

最新文章

  1. [译]Dynamics AX 2012 R2 BI系列-分析的架构
  2. android自动化之monkeyrunner
  3. Eclipse自动补全+常用快捷键
  4. RPM -U 升级机制探索
  5. subList和asList
  6. hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
  7. Android 异步加载解决方案
  8. WeX5和BeX5比较
  9. <关于数据仓库>基于docker的Mysql与Hadoop/Hive之间的数据转移 (使用Apache Sqoop™)
  10. Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug
  11. windows 下 apache设置
  12. 对于随机变量的标准差standard deviation、样本标准差sample standard deviation、标准误差standard error的解释
  13. TImage 的一些操作
  14. ANDROID_MARS学习笔记_S02_008_ANIMATION第二种使用方式:xml
  15. Windows7系统的封装
  16. 关于Java String 类型转换时null的问题
  17. qt界面操作
  18. Lintcode155-Minimum Depth of Binary Tree-Easy
  19. 有关@NgModule装饰器巩固
  20. Android为TV端助力 关于JNI的使用方法

热门文章

  1. mybatis mapper namespace
  2. El表达式和fn函数一起使用
  3. android 在EditText中显示表情图片
  4. Android样式的编写格式
  5. JDK、JRE和JVM的区别与联系
  6. hdu4111 Alice and Bob
  7. solr安装
  8. 一步一步教你做ios推送
  9. MC, MCMC, Gibbs採样 原理&实现(in R)
  10. OpenSSL之PKey的EVP封装