IOS 单例模式

提起设计模式,总让人感觉讳莫如深。其实设计模式就是在特定场景下对特定问题的解决方案。除了软件设计,设计模式同样也适用于其他方面,例如UI设计和建筑设计。设计模式大都来源于GoF的23中设计模式。IOS开发中的设计模式同样也是从这里面变化而来的。今天我们来说说单例模式。

这个设计模式作用就是解决“应用中只有一个实例”的问题。

具体的应用有:UIApplication UIAccelerometer NSUserDefault NSFileManager等等。当我们的应用程序启动的时候,应用的状态是由UIApplication类的一个实例维护的(Delegate),实现了应用中一些共享资源的访问和状态的保持。

单例模式一般会封装一个静态属性和方法。 

实现参考代码

//头文件

@interface Singleton : NSObject  

 + (Singleton *) sharedManager;

@property(nonatomic,strong) NSString *singletonData;  

@end  

 

//.m

@implementation Singleton  

static Singleton * sharedSingleton = nil;

@synthesize singleData

static Singleton *sharedManager = nil;

+(Singleton *) sharedManager

{
  static dispatch_once_t  once;

  dispatch_once(&once,^{sharedManager = [[self alloc] init];

});

return sharedManager;

}

@end

 

其中类方法采用了GCD(C语言多线程访问技术)技术,dispatch_once_t是GCD提供的结构体。使用时要将once的地址传递给dispatch_once函数,该函数能够记录该代码块是否被调用过。同时这个函数保证了线程同步,加了锁。

 

单例模式的使用情景很多,比方说在使用观察者模式开发时,需要一个manager去管理observer,所以这个管理者可以使用单例模式,里面的变量也可以放在dispatch_once函数中。

下一节我们继续介绍ios设计模式之委托模式。

posted @ 2013-12-03 19:45  慎独,潜行  阅读(166)  评论(0)    收藏  举报