单例模式
- 解决“应用中只有一个单例”的一类问题。
Objecttive-C实现原理
- 单例模式一般会封装一个静态属性,并提供静态实例方法。
代码实现
#import <Foundation/Foundation.h>
@interface WMNewRedPacketManager : NSObject
+ (instancetype)sharedManager;
@end
#import "WMNewRedPacketManager.h"
#import "UIApplication+Addition.h"
static WMNewRedPacketManager *sharedManager = nil;
@implementation WMNewRedPacketManager
+ (instancetype)sharedManager {
static dispatch_once_t pred;
dispatch_once(&pred, ^{
sharedManager = [[self alloc] init];
});
return sharedManager;
}
static WMNewRedPacketManager *sharedManager
是静态变量,类方法+ (instancetype)sharedManager;
。sharedManager
方法采用了GCD(Grand central Dispatch)技术,是一种基于C语言的多线程访问技术。上述代码中,dispatch_once方法是由GCD提供的结构体,使用时需要将GCG地址创给dispath_once
函数。dispath_once
能够记录代码块是否被调用过。
dispath_once
函数不仅意味着代码块仅会被运行一次,而且还意味着次运行还是线程同步的。也就是说,当我们使用了dispatch_once函数时,就不在需要使用诸如@synchronized
之类的语句;