iOS单例模式

转载 2015年07月08日 11:01:03

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

iOS设计模式 ——单例模式详解以及严格单例模式注意点

本文适合新手以及对怎样设计单例模式模糊不清的人阅读。本文详尽解释了单例模式的各种,单例模式,一般用来管理某些资源的,用来管理某个对象,他这个对象持有了某些核心资源,这个资源可以全局共享。大部分情况我们...
  • yusirxiaer
  • yusirxiaer
  • 2016年08月17日 14:29
  • 423

ios开发单例模式——使用GCD实现单例模式 & 非ARC单例模式 &使用GCD和线程锁实现单例模式

使用GCD和线程锁实现单例模式 static dispatch_once_t once; dispatch_once(&once,^{ } @synchronized(sel...
  • sunnyboy9
  • sunnyboy9
  • 2015年04月05日 23:51
  • 8817

ios中的线程安全单例实现

我们这里重点讨论的是线程安全,而不是单例的严格实现(若需要严格实现还需要复写一些方法,更改一些实现代码): gcd实现:   static AccountManager *sharedAcco...
  • openglnewbee
  • openglnewbee
  • 2013年11月18日 10:54
  • 5644

IOS实现单例模式的几种实现方法

1.经典方法 static CUser * gUser = nil; +(id)currentUser { if(gUser == nil) gUser = [[self...
  • th_gsb
  • th_gsb
  • 2015年07月06日 13:53
  • 4493

iOS学习笔记10-设计模式-单例模式(懒汉式,饿汉式)

设计模式有许多中,如观察者模式,单例模式,工厂模式,门面模式,等等。单例模式:1.饿汉式:一进入程序就自动创建一个单例对象,但在移动端不是很适用; 2.懒汉式:当第一次使用到单例对象时,才创建对象;...
  • xiaoluodecai
  • xiaoluodecai
  • 2015年09月13日 16:56
  • 1024

iOS单例模式(单例类)

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 1.单例模式的要点: 显然单例模式的要点有三个;一是某个类只能有一个实例;...
  • qyh791414379
  • qyh791414379
  • 2015年05月09日 09:10
  • 809

iOS 中的单例模式

http://www.jianshu.com/p/e535c7575d72 在iOS中有很多单例对象,比如UIApplication,UIScreen等等,那我们自己可以实现单例吗?答案是肯...
  • jeffasd
  • jeffasd
  • 2016年07月26日 10:20
  • 218

Objective-C(iOS)严格单例模式正确实现

转载 当希望在一个应用程序中某个类的对象只能存在一个的时候就可以考虑用单例模式来实现,单例模式在C++中比较容易实现(只需把构造函数声明为private),而在Objective-C中对象可...
  • Learner_Sky
  • Learner_Sky
  • 2017年03月18日 15:27
  • 322

iOS的ARC/MRC单例模式

1.单例模式 1.1 概念相关 (1)单例模式在程序运行过程,一个类只有一个实例(2)使用场合在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) 1.2 ARC实现单例 (1)步骤01 在...
  • dealchan
  • dealchan
  • 2017年04月19日 23:38
  • 72

实例讲解如何在iOS应用开发中使用设计模式中的代理模式

http://www.jb51.net/article/81226.htm 代理模式是OC中一种常见的设计模式,那么什么是代理模式呢?举个栗子,假设你是一个日发货量过万的淘宝卖家(A),但是...
  • jeffasd
  • jeffasd
  • 2016年06月02日 13:26
  • 778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS单例模式
举报原因:
原因补充:

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