美文网首页
iOS单例的正确创建

iOS单例的正确创建

作者: joeal | 来源:发表于2021-03-02 17:05 被阅读0次
#import "CoolObject.h"

@implementation CoolObject
+(id)shareInstance {
    static CoolObject *instance = nil;
    static dispatch_once_t token;
    dispatch_once(&token, ^{
//        必须使用super防止循环调用 self和CoolObject一样都会导致循环调用
        instance = [[super allocWithZone:NULL] init];
    });
    return instance;
}

/// 防止有人使用allocWithZone创建对象
/// @param zone 一般传null
+(instancetype)allocWithZone:(struct _NSZone *)zone {
    return [self shareInstance];
}

/// 防止有人使用copy 单例对象
/// @param zone
-(id)copyWithZone:(NSZone *)zone {
    return self;
}

@end

测试:

CoolObject *instance = [CoolObject shareInstance];
CoolObject *copyInstance = [instance copy];
CoolObject *zoneInstance = [[CoolObject allocWithZone:nil] init];
NSLog(@"instance: %p %p %p", instance, copyInstance, zoneInstance);
//输出
instance: 0x600000a38230 0x600000a38230 0x600000a38230

相关文章

  • iOS单例的正确创建

    测试:

  • 单例模式 Singleton Pattern

    单例模式-菜鸟教程 iOS中的设计模式——单例(Singleton) iOS-单例模式写一次就够了 如何正确地写出...

  • iOS 正确创建单例的方式

    1、什么是单例? 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例,在需...

  • iOS 创建单例的方法

    iOS 创建单例的方法 方法一: 方法二:

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • ios -- 创建单例

    + (JYueMyTaskManagerService*)sharedMyTaskService { static...

  • ios创建单例

    最近公司项目其中的一个控制器需要做成单例,以保证收到推送或应用内消息时弹出的是同一个界面,看了下相关资料和视频,现...

  • iOS单例创建

    常规的创建单例 .h文件中 .m文件 使用GCD写 .h中 .m文件中

  • iOS单例创建

  • iOS创建单例

    在开发过程中经常会遇到需要单例的时候,然后很多时候大家写的单例其实并不符合要求。下面介绍一个标准的单例。 一般来说...

网友评论

      本文标题:iOS单例的正确创建

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