zoukankan      html  css  js  c++  java
  • ios 线程安全单例写法

    #import "DemoObj.h"

     

    @implementation DemoObj

     

    static DemoObj *instance;

     

    /**

     1. 重写allocWithZone,用dispatch_once实例化一个静态变量

     2. 写一个+sharedXXX方便其他类调用

     */

     

    // iOS中,所有对象的内存空间的分配,最终都会调用allocWithZone方法

    // 如果要做单例,需要重写此方法

    // GCD提供了一个方法,专门用来创建单例的

    + (id)allocWithZone:(struct _NSZone *)zone

    {

        static DemoObj *instance;

        

        // dispatch_once是线程安全的,onceToken默认为0

        static dispatch_once_t onceToken;

        // dispatch_once宏可以保证块代码中的指令只被执行一次

        dispatch_once(&onceToken, ^{

            // 在多线程环境下,永远只会被执行一次,instance只会被实例化一次

            instance = [super allocWithZone:zone];

        });

        

        return instance;

    }

     

    + (instancetype)sharedDemoObj

    {   

        return [[self alloc] init];

    }

     

    @end

  • 相关阅读:
    负载平衡问题
    [SHOI2008]堵塞的交通traffic
    Bzoj3626 [LNOI2014]LCA
    [TJOI2015]旅游
    [SCOI2016]美味
    [AH/HNOI2017]单旋
    Luogu3613 睡觉困难综合征
    [SCOI2007]降雨量
    [SCOI2005]王室联邦
    HAOI2011 problem a
  • 原文地址:https://www.cnblogs.com/bug-sniper/p/4810471.html
Copyright © 2011-2022 走看看