美文网首页
单例设计

单例设计

作者: 黄定师 | 来源:发表于2019-05-12 11:14 被阅读0次

前言

单例(Singletons)在iOS开发中十分常见,比如系统的UIApplication,NSFileManager等均采用单例设计模式。在项目中,对很多全局共享的信息,我们也经常采用单例实现。虽然它们用起来十分方便,但实际上它们有许多问题需要注意。

按照《设计模式》书中的定义:单例模式是保证一个类仅有一个实例,并提供一个全局访问点去访问它。


单例实现

下面的代码主要解决的问题是:如果调用者不按照你的套路调用sharedInstance,而是调用new,alloc等方法获取实例,也要保证它们获取的是同一个实例,即一个类仅有一个实例

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface HDSingleTon : NSObject

+ (instancetype)sharedInstance;

@end

NS_ASSUME_NONNULL_END



#import "HDSingleTon.h"

@implementation HDSingleTon

static id sharedInstance;

+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc]init];
    });
    return sharedInstance;
    
    // 不采用下面这种方式:主要是防止每次调用shardInstance都进入allocWithZone,节省点资源
    //    return [[self alloc]init];
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [super allocWithZone:zone];
    });
    return sharedInstance;
}

// 防止copy出新的实例
- (id)copyWithZone:(NSZone *)zone {
    return sharedInstance;
}

// 防止mutableCopy出新的实例
- (id)mutableCopyWithZone:(NSZone *)zone {
    return sharedInstance;
}

@end



参考文献

iOS单例的精心设计历程
iOS中单例创建时不严格造成的问题和解决方法

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

  • 设计模式第二篇、单例设计模式

    目录1、什么是单例设计模式2、单例设计模式的简单实现3、单例设计模式面临的两个问题及其完整实现4、单例设计模式的应...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 2、创建型设计模式-单例设计模式

    江湖传言里的设计模式-单例设计模式 简介:什么是单例设计模式和应用 备注:面试重点考查 单例设计模式:这个是最简单...

  • 单例设计模式

    单例设计模式 单例设计模式介绍 单例设计模式的八种方法2.1 饿汉式(静态常量)2.1.1 实现步骤2.1.2 代...

  • Python 面向对象7: 单例模式

    一、内容 1.1、单例设计模式 1.2、__new__方法 1.3、Python 中的单例 二、单例设计模式 2....

网友评论

      本文标题:单例设计

      本文链接:https://www.haomeiwen.com/subject/cfaqaqtx.html