码迷,mamicode.com
首页 > 其他好文 > 详细

两种单例方式的对比

时间:2016-03-07 01:15:29      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

两种单例方式的对比

标签:

原文地址:http://www.cnblogs.com/zhubaofeng/p/5249187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!