实现代码
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
@property (nonatomic, strong, readonly) NSString *data;
+ (instancetype)sharedInstance;
@end
@implementation Singleton
static Singleton *sharedSingleton = nil;
static dispatch_once_t onceToken;
+ (instancetype)sharedInstance {
dispatch_once(&onceToken, ^{
sharedSingleton = [[self alloc] init];
});
return sharedSingleton;
}
- (instancetype)init {
self = [super init];
if (self) {
_data = @"Initial data";
}
return self;
}
@end
关键代码解释
static Singleton *sharedSingleton = nil;
:定义一个静态变量 sharedSingleton
用于存储单例实例,初始化为 nil
。
static dispatch_once_t onceToken;
:定义一个 dispatch_once_t
类型的静态变量 onceToken
,用于 dispatch_once
函数确保代码块只执行一次。
dispatch_once(&onceToken, ^{ sharedSingleton = [[self alloc] init]; });
:dispatch_once
是GCD(Grand Central Dispatch)提供的函数,它会保证传入的代码块只被执行一次,无论有多少线程同时调用 sharedInstance
方法。在这个代码块中,创建了单例的实例 sharedSingleton
。这种方式利用了GCD内部的线程同步机制,从而实现了线程安全的单例模式。