GCD单例

原创 2015年11月21日 00:45:17

单例实现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 实现单例效率要高很多

版权声明:本文为博主原创文章,未经博主允许不得转载。

ARC环境下两种单例设计模式的比较:GCD和同步锁

A. 单例模式的设计思路: (1)永远只分配一块内存来创建对象; (2)提供一个类方法,返回内部唯一的实例; (3)确保 init 方法只初始化一次; (通常采用懒加载的方式在第一...

GCD单例-懒汉式&饿汉式

懒汉式 MusicPlayer.h#import @interface MusicPlayer : NSObject// 定义全局访问点 + (instancetype)sharedMusicPlay...

(一二三)基于GCD的dispatch_once实现单例设计

要实现单例,关键是要保证类的alloc和init只被调用一次,并且被自身强引用防止释放。 近日读唐巧先生的《iOS开发进阶》,受益匪浅,通过GCD实现单例就是收获之一,下面把这个方法与大家分享。 在...

Objective-C 常用宏, 自定义log, 单例, GCD,Socket,RGB

#ifndef PrefixHeader_pch #define PrefixHeader_pch #pragma mark - ==================== 头文件 #import ...

使用GCD设置单例

#import "Banzhang.h" static Banzhang *instance; @implementation Banzhang //+(id)getBanzhang; .h中定义...
  • xywzxw
  • xywzxw
  • 2016年03月01日 19:02
  • 148

iOS 计时器 单例 GCD 切换控制器倒计时继续读秒

写项目的时候需要一个计时器来做短信验证码的倒计时,场景需求是按钮点击后开始读秒,按钮不可用,当读秒结束按钮可用,在读秒期间切换控制器,或者将应用切换到后台在切换回读秒页面依旧在继续读秒。 代码如下:...

单例GCD创建与图片生成缩略图

单例的创建就是创建出一个方法,在整个工程是唯一的,且只被执行一次,下面就是通过GCD来创建一个单例,代码如下: // 单例的创建 + (id)sharedImage{ static disp...

GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

(1)GCD实现的同步异步、串行并行。 ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 [objc] view plain...

iOS 开发 多线程详解之GCD应用延迟操作,单例设计模式,调度组

GCD延时操作特点:时间特别精确- (void)afterDemo { NSLog(@"start"); /* 参数1 : dispatch_time_t when : 延迟多...

【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCD单例
举报原因:
原因补充:

(最多只允许输入30个字)