单例实现1
+(instancetype)sharedSoundTool{
// 使用static修饰的变量可以直接在block内赋值
static id obj = nil;
static dispatch_once_t onceToken;
// 不开线程
dispatch_once(&onceToken, ^{
obj = [[self alloc] init];
});
return obj;
}
单例实现2
+(instancetype)sharedSync{
static id obj = nil;
@synchronized(self) {
if (obj == nil) {
obj = [[self alloc] init];
}
}
return obj;
}
测试效率的代码
NSLog(@"onece测试");
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
for (NSInteger index = 0; index < 1000 * 1000; index ++) {
[ZYSoundTool sharedSoundTool];
}
NSLog(@"end = %f",CFAbsoluteTimeGetCurrent() - start);
NSLog(@"互斥锁");
start = CFAbsoluteTimeGetCurrent();
for (NSInteger index = 0; index < 1000 * 1000; index ++) {
[ZYSoundTool sharedSync];
}
NSLog(@"end = %f",CFAbsoluteTimeGetCurrent() - start);
看的出来使用 dispatch_once 实现单例效率要高很多