美文网首页
创建绝对单例2

创建绝对单例2

作者: 踩坑小分队 | 来源:发表于2020-02-10 13:57 被阅读0次

之前写过一篇怎么创建绝对单利,最近有了一个新的想法。
创建绝对单利的目的无非是不管用什么创建对象的方法,创建出来的对象始终是一个
创建绝对单例1的思路是将所有能够实例化对象的方法重新写一遍,保证对象不管调用什么方法也不能创建出第二个对象。


现在另外的想法就是,只给调用者暴露一个可以实例化对象的方法,让他其他的实例化方法调用不了

NS_UNAVAILABLE & NSCAssert的结合
NS_UNAVAILABLE让方法调用不了
NSCAssert让runtime的形式也调用不了

简单粗暴

#import <Foundation/Foundation.h>

@interface Single : NSObject

/// 单利创建方法
+ (instancetype)shareSingle;

// 不可用方法声明
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
@end

#import "Single.h"

@implementation Single

+ (instancetype)shareSingle {
    static Single *single = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        single = [[Single alloc] initXXX];
    });
    return single;
}


- (instancetype)initXXX
{
    self = [super init];
    if (self) {
    }
    return self;
}

#pragma mark- 避免通过runtime方法调用方法实现实例化
- (instancetype)init
{
    NSCAssert(0, @"我是一个单利,不能调用init 方法欧");
    return nil;
}

+ (instancetype)new
{
    NSCAssert(0, @"我是一个单利,不能调用new 方法欧");
    return nil;
}

@end

相关文章

  • 创建绝对单例2

    之前写过一篇怎么创建绝对单利,最近有了一个新的想法。创建绝对单利的目的无非是不管用什么创建对象的方法,创建出来的对...

  • 创建绝对单例

    单例,在工程中经常使用。单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模...

  • 数据库含外键关联表(重要!!!)

    1.创建NSObject 2.用单例模式创建 +(id)shareDataCenter {//创建单例 DataC...

  • Swift 单例传值

    回顾 Objc 创建单例的方式: 1.创建单例 2.给单例的属性赋值 3.输出单例的属性值

  • 8. 单例

    单例 1、GCD方式创建单例 2、互斥锁方式 销毁

  • 创建型模式——单例模式

    单例模式简介 单例模式是java创建型模式之一,主要作用是创建唯一对象。 单例模式特点:1.单例类只有一个实例。2...

  • Android Rxjava+Retrofit 网络数据请求

    1、添加依赖 2、创建 RetrofitFactory (单例模式) 创建 OkHttpClient addInt...

  • 单例模式

    1. 什么是单例模式? 创建单例类的方法叫单例模式. 单例类, 就是只能产生一个对象的类. 2. 为什么使用单例模...

  • iOS 单例模式 - 单例对象销毁【@synchronized】

    单例对象的创建方式 单例.h 文件的实现 单例.m 文件的实现 单例对象的销毁【@synchronized创建方式...

  • iOS 单例模式 - 单例对象销毁【GCD】

    单例对象的创建方式 单例.h 文件的实现 单例的.m 文件的实现 单例对象的销毁【GCD创建的方式】 使用单例对象...

网友评论

      本文标题:创建绝对单例2

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