zoukankan      html  css  js  c++  java
  • iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式


    方式一:iOS4版本之前
         static SingleClassManager *singleManager = nil;
         +(SingleClassManager*)sharedManager
         {
                 @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全
                 {             
                       if(singleManager == nil)
                        {
                                  singleManager = [[SingleClassManager alloc]init];
                        } 
                  }
               return singleManager;
          }
     
     
    方式二:iOS5版本开始(block函数)
        +(SingleClassManager *)sharedManager
        {
              static SingleClassManager *singleManager = nil;
              static dispatch_once_t  predicate;
              dispatch_once(&predicate,^{
                  singleManager = [[SingleClassManager alloc]init];
              });
              return singleManager;
        }
        该方法有很多优势: 
               1 线程安全
               2 很好满足静态分析器要求
               3 和自动引用计数(ARC)兼容 
               4 仅需要少量代码
         说明:
                该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
    dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
  • 相关阅读:
    c读取文本文档
    java类中定义接口
    android selector
    android listview
    android继承Dialog实现自定义对话框
    移植net-snmp到开发板(mini210)
    [BZOJ1901]Zju2112 Dynamic Rankings
    [BZOJ3524][Poi2014]Couriers
    [codeforces722D]Generating Sets
    [codeforces722C]Destroying Array
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4856387.html
Copyright © 2011-2022 走看看