1..m中
#import "MySingleton.h"
@implementation MySingleton
static MySingleton *single = nil;
+(MySingleton *)shareSingleton{
@synchronized(self){
if (single == nil) {
single = [[self alloc]init];
}
return single;
}
}
#pragma mark - 标准单例需重写以下方法
//杜绝所有可能引起单例对象引用计数加/减的操作
//alloc copy mutableCopy retain new
+(id)allocWithZone:(struct _NSZone *)zone{
@synchronized(self){
if (single == nil) {
single = [super allocWithZone:zone];
}//保证使用的是同一块内存空间
return single;
}
}
//[对象指针 减方法] [类名 加方法]
//copy:把可变/不可变的对象拷贝成一个新的不可变对象
-(id)copyWithZone:(NSZone *)zone{
return self;
}
//mutableCopy:把可变/不可变的对象拷贝成一个新的可变对象
-(id)mutableCopyWithZone:(NSZone *)zone{
return self;
}
-(id)retain{
return self;
}
-(NSUInteger)retainCount{
return UINT_MAX; //1
}
-(oneway void)release{
//oneway:线程间通信的一个接口。表示单向传输
}
-(id)autorelease{
return self;
}
2.UIViewController中
//调用alloc时,本质上调用的是allocWithZone这个方法
+(id)allocWithZone:(struct _NSZone *)zone{
NSLog(@"alloc with zone");
RootViewController *rvc = [super allocWithZone:zone];
return rvc;
}
@end