博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建线程安全的单例(ARC或 非ARC)
阅读量:7282 次
发布时间:2019-06-30

本文共 1393 字,大约阅读时间需要 4 分钟。

一:创建 宏 文件 SynthesizeSingleton.h

SynthesizeSingleton.h#if __has_feature(objc_arc) // ARC Version#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)   \\+ (classname *)shared##classname\{\    static classname *shared##classname = nil;\    static dispatch_once_t onceToken;\    dispatch_once(&onceToken, ^{\        shared##classname = [[classname alloc] init];\    });\    return shared##classname;\}#else // Non-ARC Version#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \static classname *shared##classname = nil; \+ (classname *)shared##classname \{ \    @synchronized(self) \    { \        if (shared##classname == nil) \        { \            shared##classname = [[self alloc] init]; \        } \    } \    return shared##classname; \} \\+ (id)allocWithZone:(NSZone *)zone \{ \@synchronized(self) \{ \if (shared##classname == nil) \{ \shared##classname = [super allocWithZone:zone]; \return shared##classname; \} \} \return nil; \} \- (id)copyWithZone:(NSZone *)zone \{ \return self; \} \- (id)retain \{ \return self; \} \- (NSUInteger)retainCount \{ \return NSUIntegerMax; \} \- (oneway void)release \{ \} \- (id)autorelease \{ \return self; \}#endif

  二:使用

MyClass.h@interface MyClass : NSObject+(DataStorage *)sharedMyClass;@endMyClass.m#import "SynthesizeSingleton.h"@implementation MyClassSYNTHESIZE_SINGLETON_FOR_CLASS(MyClass)@end

 

转载于:https://www.cnblogs.com/cocoajin/p/3176265.html

你可能感兴趣的文章
Ajax Step By Step2
查看>>
codeforces 701 B. Cells Not Under Attack
查看>>
当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
查看>>
Creating a Custom Page Layout in SharePoint 2013
查看>>
mysql foreignkey
查看>>
Django 中的自定义分页标签
查看>>
[转]ASP.NET自定义控件复杂属性声明持久性浅析
查看>>
PAT (Basic Level) Practise (中文)-卡拉兹(Callatz)猜想
查看>>
第八周进度总结
查看>>
axios 注意点
查看>>
刷新ListView刷新时的闪烁问题
查看>>
cuda c例程学习——eigenvalues(1)
查看>>
通过本地文件数据库查询手机归属地
查看>>
uva 10152 ShellSort
查看>>
前端之放大镜
查看>>
民航飞机专业词汇
查看>>
数据类型和变量
查看>>
通过excel快速拼接SQL
查看>>
json数据类型
查看>>
vue-cli的安装使用
查看>>