两种单例方式的对比

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);

posted @ 2016-03-07 00:38  朱保锋  阅读(133)  评论(0编辑  收藏  举报