你的位置:首页 > 操作系统

[操作系统]iOS 单例模式


 

单例模式”是我在iOS中最常使用的设计模式之一。单例模式不需要传递任何参数,就有效地解决了不同代码间的数据共享问题。单例类是一个非常重要的概念,因为它们表现出了一种十分有用的设计模式。单例类的应用贯穿于整个iOS的SDK中。例如,UIApplication类有一个方法叫sharedApplication,从任何地方调用这个方法,都将返回与当前正在运行的应用程序相关联的UIApplication实例。除了这个,NSNotificationCenter(消息中心) 、NSFileManager(文件管理) 、 NSUserDefaults(应用程序设置) 、NSURLCache(请求缓存)、NSHTTPCookieStorage(应用程序cookies池)都是系统单例;单例类保证了应用程序的生命周期中有且仅有一个该类的实例对象,而且易于外界访问。

单例模式的要点:

  一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

单例模式的优点:

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

代码示例:

MySingletonClass.h

#import <Foundation/Foundation.h>@interface MySingletonClass : NSObject//单例方法
+(MySingletonClass *)sharedInstance;@end

MySingletonClass.m

 

#import "MySingletonClass.h"@implementation MySingletonClass//1、为单例对象实现一个静态实例,并初始化,然后设置成nil,static MySingletonClass *manager = nil;//2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,+(MySingletonClass *)sharedInstance{    @synchronized(self) {    if(manager == nil) {      manager = [[MySingletonClass alloc] init]; //  assignment  not  done  here    }  }  return manager;}//3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,+(id)allocWithZone:(NSZone *)zone{  @synchronized(self){        if (!manager) {            manager = [super allocWithZone:zone]; //确保使用同一块内存地址            return manager;          }        return nil;  }}//4、适当实现copyWithZone,release和autorelease。- (id)init;{  @synchronized(self) {        if (self = [super init]){            return self;    }        return nil;  }}//确保copy对象也是唯一- (id)copyWithZone:(NSZone *)zone;{    return self;  }

 

参考链接:

http://www.cnblogs.com/lyanet/archive/2013/01/11/2856468.html

http://blog.sina.com.cn/s/blog_71715bf80101a8mm.html