單例模式
- 解決“應用中只有一個單例”的一類問題。
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
之類的語句;