惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
B
Blog
Stack Overflow Blog
Stack Overflow Blog
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
罗磊的独立博客
L
LangChain Blog
V
Visual Studio Blog
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享

博客园 - 观海云不远

ChatView:把 ChatGPT / Claude 对话保存、分享和发布成独立网页 AI对普通人到底有什么用?这8个场景告诉你答案 用 AI 做点不一样的事:你出想法,我来实现 Python 调试工具PDB的基本使用 帮园子算账省钱 linux I/O性能优化 Linux内存问题排查工具 CPU优化方案 系统中出现大量不可中断进程和僵尸进程怎么办? CPU 使用率过高怎么办 CPU上下文切换 到底应该怎么理解“平均负载”? iOS开发学习笔记(OC语言)——block使用示例 iOS开发学习笔记(OC语言)——调起APP(URL Scheme) iOS开发学习笔记(OC语言)——文件基本操作 iOS开发学习笔记(OC语言)——网络请求 iOS开发学习笔记(OC语言)——底部tab栏 iOS开发学习笔记(OC语言)——UIView和UIViewController生命周期 Jenkins安装配置回滚 Mac 下反编译Android APK
iOS开发学习笔记(OC语言)——线程安全的单例
观海云不远 · 2022-02-14 · via 博客园 - 观海云不远

SingleClass.h

//
//  SingleClass.h
//  First
//
//  Created by xxx on 2022/2/9.
//

#import <Foundation/Foundation.h>

@interface SingleClass : NSObject

+(instancetype) sharedInstance;

@end

SingleClass.m

//
//  SingleClass.m
//  First
//
//  Created by xxx on 2022/2/9.
//

#import "SingleClass.h"

@implementation SingleClass

+ (instancetype)sharedInstance {
    static SingleClass * ins = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        ins = [[super allocWithZone:nil] init];
    });
    
    return ins;
}

+(id)allocWithZone:(NSZone *)zone {
    return [self sharedInstance];
}

-(id)copyWithZone:(NSZone *) zone {
    return [[self class] sharedInstance];
}

-(id)mutableCopyWithZone:(NSZone *) zone {
    return [[self class] sharedInstance];
}

@end

测试

#import "SingleClass.h"



SingleClass *ins1 = [SingleClass sharedInstance];
NSLog(@"SingleClass obj1 = %@.", ins1);
    
SingleClass *ins2 = [[SingleClass alloc] init];
NSLog(@"SingleClass obj2 = %@.", ins2);
    
SingleClass *ins3 = [SingleClass new];
NSLog(@"SingleClass obj3 = %@.", ins3);
    
if (ins1 == ins2 && ins1 == ins3) {
    NSLog(@"SingleClass test success");
} else {
    NSLog(@"SingleClass test failed");
}