单例的写法(更新Swift2.1+)

在开发中我们常常会碰到需要一个类只有一个实例的需求,这个时候就要使用到单例,OC(ARC)中格式如下

#pragma mark - 单例
/** 静态实例,并初始化*/
static id instance_;
/** 实例构造检查静态实例是否为nil*/
+(instancetype)sharedInstance {
    /** 
        该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
     dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题
     */
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance_ = [[self alloc] init];
    });
    return instance_;
}

/** 
    重写allocWithZone方法
    重写这个方法的原因是alloc init的时候会调用到allocWithZone
    重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例
 */
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance_ = [super allocWithZone:zone];
    });
    return instance_;
}

#pragma mark - <NSCoping>
- (id)copyWithZone:(NSZone *)zone {
    return instance_;
}

更新Swift 2.1+单例写法:

static let shareInstance = NetworkTools()
  • Swift中一行代码搞定,并且Swift中推举这样编写单例
    • Swift中单例的命名规范: 以share开头, 后面跟上Instance
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例一般作为:工具类 单例命名:一般情况下如果一个类是单例,那么就要提供一个类方法用于快速创建单例对象,而且这个类...
    甘哲157阅读 5,713评论 0 15
  • 在app中滚动的广告视图是最常用的小模块之一,现在把一些自己制作的banner的重要部分写上来,与大家分享,当然这...
    hoggenWang阅读 2,350评论 0 0
  • 连接命运(16) 吕奇根的老婆慢慢闭上了眼睛,离开了尘世。她是一个很普通的老百姓,没有任何行动让人觉得她灿烂光明,...
    云先阅读 1,885评论 12 17
  • 秋日的城堡 有风 这秋风啊 比我还要顽皮 她们试穿着大人的衣裳 还把我的书包扯下 背一背就跑 她们呼呼地互相打闹...
    zyh137阅读 2,187评论 0 0
  • 既见君子,云胡不喜——《诗经·风雨》 2015年,我大二下学期。5月30日晚上,他发了一条朋友圈。意思是喜欢一个人...
    拾七画阅读 11,353评论 0 0