IOS单例类模式

转载 2015年11月19日 21:10:21

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

1.单例模式的要点:

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

2.单例模式的优点:

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


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;
    }
}

@end

67.iOS严谨单例写法/可继承单例

单例模式在iOS开发中可能算是最常用的模式之一了,但是由于OC本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦. 今天就来说一说, 单例创建的方式和严谨的单例写法及可继承单例编写....
  • wangyanchang21
  • wangyanchang21
  • 2016年03月28日 13:54
  • 2321

单例模式在iOS中的应用——三种创建单例方法对比

单例模式优点 单例模式在内存中只有一个实例,减少了内存开支。特别是一个对象需要频繁的创建、销毁时,而创建与销毁的性能有无法优化,单例模式的优势就非常明显。单例模式只生成一个实例,减少了系统性能开...
  • quanzheng92
  • quanzheng92
  • 2014年11月10日 21:22
  • 1579

OC宏定义实现单例设计模式

单例设计模式是在开发中经常可以看到的一种设计模式,不管是在 Cocoa Touch框架还是我们自己的业务逻辑中都可以看到它的身影。 1、首先解答一个问题,什么是单例设计模式呢?      它可以保证在...
  • jb448372210
  • jb448372210
  • 2015年07月20日 23:03
  • 697

Singleton单一状态模式(单例模式)

单一状态模式定义: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。 还有, single...
  • ljt2724960661
  • ljt2724960661
  • 2016年02月14日 20:23
  • 496

iOS-创建单例模式

iOS中创建单例模式 方法一:#pragma mark - 设计单例模式 static id _instance; //重写allocWithZone:方法 +(instancetype)alloc...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2016年03月31日 15:30
  • 768

C++工厂类和单例模式的结合使用

单例模式: 简单来说一个类只有一个实例且封装性好。这里用宏定义实现。animal_singleton.h#pragma once #include #define IMPLEMENTION_SING...
  • baidu_34788529
  • baidu_34788529
  • 2016年05月26日 21:42
  • 899

Objective-C:初始化、实例方法、类方法、工厂方法、单例模式

初始化 无参初始化 1.1 init是从父类NSObject中继承的,所以不需要在.h文件中声明 带参初始化 2.1 方法名的格式为:-(id)initWith… 2.2 instancetyp...
  • cz_zol
  • cz_zol
  • 2016年08月24日 21:01
  • 598

《剑指offer》:[48]不能被继承的类-单例模式

题目:不能被继承的类    不能继承,一般我们会对构造函数做手脚。不能继承,继承会发生什么,继承的类在创建对象的时候,会自动调用父类的构造函数,如果我们在这里限制让子类不能调用父类的构造和析构就是实现...
  • gogoky
  • gogoky
  • 2016年06月25日 11:52
  • 2450

qt (c++) 之 单例模式

转载自:http://blog.csdn.net/liang19890820/article/details/61615495 简述 单例模式(Singleton Pattern)是设计模式中最...
  • baidu_33570760
  • baidu_33570760
  • 2017年05月04日 11:42
  • 547

iOS 中的单例模式

http://www.jianshu.com/p/e535c7575d72 在iOS中有很多单例对象,比如UIApplication,UIScreen等等,那我们自己可以实现单例吗?答案是肯...
  • jeffasd
  • jeffasd
  • 2016年07月26日 10:20
  • 204
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS单例类模式
举报原因:
原因补充:

(最多只允许输入30个字)