ios中的线程安全单例实现

简介: 我们这里重点讨论的是线程安全,而不是单例的严格实现(若需要严格实现还需要复写一些方法,更改一些实现代码): gcd实现:   static AccountManager *sharedAccountManagerInstance = nil;  + (A...

我们这里重点讨论的是线程安全,而不是单例的严格实现(若需要严格实现还需要复写一些方法,更改一些实现代码):

gcd实现:

  static AccountManager *sharedAccountManagerInstance = nil; 

+ (AccountManager *)sharedManager { 


    static dispatch_once_t predicate; dispatch_once(&predicate, ^{       
          sharedAccountManagerInstance = [[AccountManager alloc] init]; 
    });

    return sharedAccountManagerInstance; 

}

利用系统提供的能力来实现,此处保证^{       
          sharedAccountManagerInstance = [[self alloc] init]; 
    });在应用程序的生命周期里只被执行一次;若sharedAccountManagerInstance被外面被手动释放(arc下无法手动release不存在此问题),则会造成崩溃,崩溃原因时野指针访问,系统错误码应为exc_bad_access.因此调用获取单例对象者是不应该释放该单例对象的,这点需要严格遵守,单例本身的设计思想也包含了这一点。


双检锁实现:增加的外围检查用来提高效率。

static AccountManager *sharedAccountManagerInstance = nil; 

+ (AccountManager *)sharedManager


   if(sharedAccountManagerInstance == nil)

{

  @synchronized (self){
        if (sharedAccountManagerInstance == nil) 
        {
            sharedAccountManagerInstance = [[AccountManager alloc] init];
        }
    }

}

    return sharedAccountManagerInstance; 

}


目录
相关文章
|
3月前
|
设计模式 消息中间件 安全
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(二)
34 1
|
7月前
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
221 0
|
3月前
|
设计模式 存储 Java
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(四)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(四)
93 1
|
3月前
|
设计模式 存储 安全
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(三)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(三)
38 2
|
3月前
|
设计模式 Java 关系型数据库
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(一)
多线程编程设计模式(单例,阻塞队列,定时器,线程池)(一)
29 0
|
4月前
|
安全 Python
python 线程安全的 单例 实现 日志分级
python 线程安全的 单例 实现 日志分级
49 0
|
缓存 网络协议 Java
java线程池单例
java线程池单例
289 0
|
7月前
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
489 1
|
8月前
|
安全
线程安全的单例懒汉式
线程安全的单例懒汉式
26 0
|
8月前
|
设计模式 数据挖掘 C++
C++并发与多线程(三)单例设计模式与共享数据分析、call_once、condition_variable使用
C++并发与多线程(三)单例设计模式与共享数据分析、call_once、condition_variable使用

热门文章

最新文章