Objective-C 单例模式
注:这里的代码使用自动引用计数(ARC),不涉及非 ARC 下的实现。
代码
// singleton.h
@interface Singleton : NSObject
@property (nonatomic, retain) NSString *string;
+ (id)sharedInstance;
@end
// singleton.m
#import "singleton.h"
@implementation Singleton
@synthesize someProperty;
#pragma mark Singleton Methods
+ (id)sharedInstance
{
static Singleton *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (id)init
{
if (self = [super init])
{
self.string = [[NSString alloc] initWithString:@"default string"];
}
return self;
}
解析
与单例模式传统的实现方式不同,上面的代码使用 GCD 的 dispatch_once
方法来确保 sharedInstance
只会被初始化一次。
这种实现方式的优缺点
线程安全。使用 GCD 的 dispatch_once 保证只初始化一次。
启动时加载,好像不能实现延迟加载(第一次使用时加载)