单例模式解析

2015-02-10  本文已影响160人  英贰与我

在软件工程中,单例是一种用于实现单例的数学概念, 既将类的实例化仅限制成一个对象的一种设计模式.或者我们可以简单地将它理解为一个类,只能实例化一个对象的类.在我们IOS工程中,UiApplication 中至少有一个单例模式的存在;

比如: [UIApplication sharedApplication] 这样就可以在工程里调这个单例;

单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源。

单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个。

对于目前单例模式的最佳方式,就是GCD出来以后我们所引用的dispatch_once函数创建的单例;

dispatch_once函数,接收一个dispatch_once用于检查该对象是否已经被调用,它还接收一个希望在应用的生命周期中只能被调用一次的代码块,这就是单例的实例化要的;

dispatch_once函数还有一个好处,就是线程安全问题,使用dispatch_once函数,这就意味着你不用再去给单例加@synchronized,也称给单例加锁;关于线程安全为题,个人理解:给单例对象之所以要加锁,是应为系统对于单例对象的内存申请是在堆区,而不是栈区,而我们在调用的时候一般是在栈区去执行它,也就是说每一个线程都可以调用它,而我们知道堆区的内存是有共享性的,为了保证单例对象的唯一性,避免不会在同一时间被调用,我们给他采用的加锁;

代码演示:

.h中

#import@interface Model : NSObject

//单例

+ (instancetype)sharedHandel;

#import "Model.h"

@implementation Model

.m中方法的实现

+ (instancetype)sharedHandel

{

static Model *model = nil;

static dispatch_once_t OnceToken;

dispatch_once(&OnceToken, ^{

model = [[Model alloc] init];

});

return model;

}

@end

上一篇 下一篇

猜你喜欢

热点阅读