单例模式

  单例模式,其实从字面意思很好理解,就是有且只有一个,也就是在程序中有且只有一个实例,任何时候对其的访问,返回的都是同一个实例。这就是面向对象中的常见的单例模式。
  单例模式的意图就是使得类的一个对象实例成为系统中的唯一实例。这时候就需要一种只允许生成对象唯一实例的机制,“阻止”所有其他想要生成对象的可能。所以,用静态的类方法来限制实例化的过程,从而达到有且只有一个对象的产生。单例模式,保证一个类有且只有一个实例,并提供一个访问它的全局访问点。
  下面的图标识了Singleton的静态结构


7820436-47b94cef07fed41a.png
屏幕快照 2018-09-19 下午4.39.16.png

  接下来就是在iOS的代码中实现单例模式。
Singleton.h

@interface Singleton : NSObject 
{

}

+ (Singleton *) sharedInstance;

- (void) operation;
@end

Singleton.m

@implementation Singleton


static Singleton *sharedSingleton_ = nil;

- (void) operation
{
  // do something
  NSLog(@"Singleton");
}

+ (Singleton *) sharedInstance
{
  if (sharedSingleton_ == nil)
  {
    sharedSingleton_ = [NSAllocateObject([self class], 0, NULL) init];
  }
  
  return sharedSingleton_;
}


+ (id) allocWithZone:(NSZone *)zone
{
  return [[self sharedInstance] retain];
}
@end

  单例化的实例,只能通过子类化进行扩展,而且扩展的对象不会破坏原有的代码。

  由于单例化的实例在程序中有且只有一份实例,所以在使用的过程中,或多或少的会遇到多线程的访问问题。因此,需要在sharedSingleton_静态实例的nil检查周围加入一些@synchronized()程序块或者使用NSLock加锁。如果有其他属性需要保护,也可以把它们声明为atomic类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值