Object-c之单例模式

原创 2015年11月18日 17:36:35

Objective-c 单例设计模式(Singleton)
一、什么是单例模式:(Singleton)
单例模式的意图是是的类的对象成为系统中唯一的实例,提供一个访问点,供客户类共享资源。

二、什么情况下使用单例?
1、类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法。
2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码

三、单例设计模式的要点:
(1) 某个类只能有一个实例。
(2)他必须自行创建这个对象
(3)必须自行向整个系统提供这个实例;
(4)为了保证实例的唯一性,我们必须将
-(id)copyWithZone:(NSZone *)zone
+(id)allocWithZone:(NSZone *)zone
-(id)retain、
-(oneway void)release
-(id)autorelease 的实现方法进行覆盖。(具体实现请看程序)
(5)这个方法必须是一个静态类

四、在OC中实现单例模式:
先创建一个单例类,即:
#import

这里写代码片

在实现文件中实现如下:

#import "Bee.h"
@implementation Bee
static Bee  *sharesingleton=nil;//必须声明为一个静态方法
+(Bee *)shareIstance
{
    if (sharesingleton == nil) {//检查唯一实例是否创建
        sharesingleton = [[super allocWithZone:NULL] init ];
// 这里不是使用alloc,而是调用[[super allocWithZone:NULL] init ] ,为什么是super而不是self呢? 这是因为已经在self中冲在了基本对象的分配方法,所以需要借用父类的(NSobject)的功能帮助处理底层内存分配的杂务;    
    }
    return sharesingleton;
}
// 覆盖NSObject方法
+(id)allocWithZone:(NSZone *)zone
{
    return [[self shareIstance] retain];
}
-(id)copyWithZone:(NSZone *)zone
{
    return self;//覆盖父类 NScoping 中的方法
}
-(id)retain
{
    return self;
}
-(NSUInteger)retainCount
{
    return NSUIntegerMax;//无穷大的数,表示不能释放
}
-(oneway void)release
{
    //什么也不做
}
-(id)autorelease
{
    return self;
}

@end
注意:所谓单例,即我们自己创建一个单例类,该类只能生成唯一的对象,即用  if (sharesingleton == nil)    方法来保证唯一性,为了防止该对象被复制(copy)或者retain 和 release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。
版权声明:本文为博主原创文章,未经博主允许不得转载。

object-c 单例模式的线程安全

单例模式(Singleton Pattern):保证一个类只有一个实例,并且提供一个访问它的全局访问点。单例在程序设计中是最常见的设计模式之一,下面我们来实现一个单例:Singleton.h 文件#i...
  • guoyuyanmen
  • guoyuyanmen
  • 2016年04月26日 13:34
  • 555

使用Object-C实现23种设计模式之单例模式

今天给大家讲解一下第四种创建模式——单例模式,单例模式不同于前几种,前几种更注重逻辑,而单例模式则偏重于内存管理以及实际运用,相对前几种要相对简单。 所谓单例模式,就是一种让某个类只产生单一实例的模式...
  • u013054715
  • u013054715
  • 2016年05月23日 22:43
  • 4403

几种语言的单例模式的实现(C++/C#/Object-C)

几种语言的单例模式(C++/C#/Object-C)
  • skylin19840101
  • skylin19840101
  • 2017年02月07日 10:26
  • 327

Object-C 单例模式

标准模版代码: // Singleton.h文件 #import @interface Singleton : NSObject + (Singleton*)sharedManager; ...
  • chenshun123
  • chenshun123
  • 2016年08月17日 11:36
  • 198

Object-c单例模式

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) / /staticclassname *shared##classname = nil; / /+ ...
  • daneildemon
  • daneildemon
  • 2010年12月02日 09:26
  • 648

object-c 单例模式

转载:http://blog.csdn.net/sqc3375177/article/details/11836521 最近因为在ios应用开发中,考虑到一些公共方法的封装使用,就决定使用单例模...
  • llf021421
  • llf021421
  • 2014年04月06日 03:13
  • 557

大话设计模式——单例模式

宏观导图 细节展示  单例模式的结构图: 关键代码:  在GetInstance方法中,要加入判断。 if (instance==null) { instance=new Single...
  • u011500356
  • u011500356
  • 2015年01月05日 21:44
  • 1471

java 单例设计模式使用场景

单例设计模式的使用场景说明,优缺点,在线程中该使用那种方式的单例,其中涉及到类在JVM中的分配......
  • bob_Xing_Yang
  • bob_Xing_Yang
  • 2017年05月23日 10:53
  • 387

Object-C单例模式Singleton

单例的意思就是唯一一个实例,它可以确保这个实例自行初始化并向整个系统提供这个实例,这个类称为单例类。 1、单例模式的要点: 一是某个类只能有一个实例。 二是它必须自行创建这个实例。 三是它必须...
  • ccq1029
  • ccq1029
  • 2015年01月12日 16:01
  • 1143

object-c 单例模式(包括ARC)

大家知道,单例模式是ios里面经常使用的模式,例如 [UIApplication sharedApplication] (获取当前应用程序对象)、 [UIDevicecurrentDevice]...
  • u011288812
  • u011288812
  • 2013年07月03日 17:22
  • 151
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-c之单例模式
举报原因:
原因补充:

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