#define singleton_interface(className)
+ (className *)shared##className;
// @implementation
#define singleton_implementation(className)
static className *_instance;
+ (id)allocWithZone:(NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
+ (className *)shared##className
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
用法:
@interface AccountTool : NSObject singleton_interface(AccountTool) @end
@implementation AccountTool singleton_implementation(AccountTool) @end