IOS GDC实现单例写法ARC与MRC
static id _instance;
/**
* alloc方法内部会调用这个方法
*/
+ (id)allocWithZone:(struct _NSZone *)zone
{
if (_instance == nil) { // 防止频繁加锁
@synchronized(self) {
if (_instance == nil) { // 防止创建多次
_instance = [super allocWithZone:zone];
}
}
}
return _instance;
}
+ (instancetype)sharedMusicTool
{
if (_instance == nil) { // 防止频繁加锁
@synchronized(self) {
if (_instance == nil) { // 防止创建多次
_instance = [[self alloc] init];
}
}
}
return _instance;
}
- (id)copyWithZone:(NSZone *)zone
{
return _instance;
}
// 如果是非ARC环境需要加上以下代码
// 重写release对象不会被释放掉
- (oneway void)release { }
// retain直接返回对象
- (id)retain { return self; }
// 读取对象ratainCount返回1
- (NSUInteger)retainCount { return 1;}
// 执行自动释放操作返回self
- (id)autorelease { return self;}
版权声明:本文为博主原创文章,未经博主允许不得转载。