//
// singleton.h
// singleton
//
// Created by zmx on 16/2/20.
// Copyright © 2016年 zmx. All rights reserved.
//
#define singleton_h(name) + (instancetype)shared##name;
#if __has_feature(objc_arc)
#define singleton_m(name) static id _instance; \
\
+ (instancetype)shared##name { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
} \
\
+ (instancetype)allocWithZone:(struct _NSZone *)zone { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
\
- (id)copyWithZone:(NSZone *)zone { \
return _instance; \
}
#else
#define singleton_m(name) static id _instance; \
\
+ (instancetype)sharedAudioTool { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
} \
\
+ (instancetype)allocWithZone:(struct _NSZone *)zone { \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
\
- (id)copyWithZone:(NSZone *)zone { \
return _instance; \
} \
\
- (instancetype)retain { \
return _instance; \
} \
\
- (instancetype)autorelease { \
return _instance; \
} \
\
- (oneway void)release { \
\
} \
\
- (NSUInteger)retainCount { \
return 1; \
}
#endif
//
// AudioTool.h
// singleton
//
// Created by zmx on 16/2/20.
// Copyright © 2016年 zmx. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "singleton.h"
@interface AudioTool : NSObject <NSCopying>
singleton_h(AudioTool)
@end
//
// AudioTool.m
// singleton
//
// Created by zmx on 16/2/20.
// Copyright © 2016年 zmx. All rights reserved.
//
#import "AudioTool.h"
@implementation AudioTool
singleton_m(AudioTool)
@end