单例模式,大家都懂,不要用继承,现在都是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
网友评论