进来看见好多人在说创建单例对象的问题,本着大家共同交流的原则.本人也写了一个自己的观点.可能和一些大神的不一样.在此本人还建议,如果你经常要用单例对象,可以把单例代码定义为一个带参数的宏
这里是在ARC模式下创建单例对象,在MRC下我们还要考率更多的内存问题,代码已在下面写出,被我注释了.
单例模式:设计思路
(1)永远只分配一块内存来创建对象
(2)提供一个类方法,返回内部唯一的一个变量
(3)最好保证init方法也只初始化一次
#import "AudioTool.h"
@implementation AudioTool
static id _instance;
+ (instancetype)sharedAudioTool{
/**
并且这里只需要创建一次
GCD里面提供一次性创建代码的东西 这里我们用GCD而不用互斥锁 ,是因为GCD的工作效率要不互斥锁高(可以)
dispatch_once 会自动帮我们加锁,来解决多线程操作同一资源的问题,不需要我们再去考虑了
*/
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"---shared--xxxx----");
_instance = [[self alloc] init];
});
return _instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"---allocWithZone--xxxx----");
_instance = [super allocWithZone:zone];
});
return _instance;
}
- (id)copyWithZone:(NSZone *)zone{
return _instance;
}
/**
以下是非ARC需要考虑的问题
**/
//- (oneway void)release{
//
//}
//
//- (instancetype)retain{
// return _instance;
//}
//
//- (instancetype)autorelease{
// return _instance;
//}
//
//- (NSUInteger)retainCount{
// return 1;
//}
@end