欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS 单例模式

程序员文章站 2022-07-13 23:39:04
...

单例模式,大家都懂,不要用继承,现在都是GCD搞,现在也都是ARC了,搞个宏,需要其他的参考别的咯,不啰嗦,直接代码,嘿嘿,我喜欢伸手党。

一、 搞个.h文件

// .h文件
#define YZGSingletonH(name) + (instancetype)shared##name;

// .m文件
#define YZGSingletonM(name) \
static id _instance; \
\
+ (instancetype)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
\
+ (instancetype)shared##name \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return _instance; \
} \
- (id)mutableCopyWithZone:(NSZone *)zone \
{ \
return _instance; \
}

二、使用

// .h
#import <Foundation/Foundation.h>
#import "YZGSingleton.h"

@interface Person : NSObject
YZGSingletonH(Person)
@end

// .m
#import "Person.h"

@implementation Person
YZGSingletonM(Person)
@end


NSLog(@"%p, %p", [Person sharedPerson], [[Person alloc] init]);
打印 0x7fda1bc06e80, 0x7fda1bc06e80

上一篇: iOS单例模式

下一篇: iOS单例