1.加互斥锁的单例(因为在多线程的情况下,不枷锁的情况线程是不安全的)
+ (instancetype)shaerdNetTool;
// 实现
+ (instancetype)shaerdNetTool{
static NetToll *tool = nil;
@synchronized(self) {
if (tool == nil) {
tool = [NetToll new];
}
}
return tool;
}
2.通过GCD的一次执行 (一次执行线程是安全的,整个运行过程只执行一次)
// 声明
+ (instancetype)shaerdNetTooOncel;
// 实现
+ (instancetype)shaerdNetToolOnce{
static NetToll *tool = nil;
if (tool == nil) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
tool = [NetToll new];
});
}
return tool;
}
比较效率
CFAbsoluteTime time1 = CFAbsoluteTimeGetCurrent();
for (int i =0; i<100000; i++) {
[NetToll shaerdNetToolOnce];
}
NSLog(@"%f",CFAbsoluteTimeGetCurrent()-time1);
CFAbsoluteTime time2 = CFAbsoluteTimeGetCurrent();
for (int i =0; i<100000; i++) {
[NetToll shaerdNetTool];
}
NSLog(@"%f",CFAbsoluteTimeGetCurrent()-time2);