1、非ARC单例
static InstanceManager* sharedManager = nil;
+ (InstanceManager*) sharedInstance
{
@synchronized (self)
{
if (sharedManager == nil)
{
[[self alloc] init];
}
}
return sharedManager;
}
+ (id) allocWithZone:(NSZone *)zone
{
@synchronized (self)
{
if (sharedManager == nil)
{
sharedManager = [super allocWithZone:zone];
return sharedManager;
}
}
return nil;
}
- (id) copyWithZone:(NSZone *)zone
{
return self;
}
- (id) retain
{
return self;
}
- (unsigned) retainCount
{
return UINT_MAX;
}
- (id) autorelease
{
return self;
}
- (id)init
{
@synchronized(self)
{
[super init];
return self;
}
}
2、ARC单例
__strong static InstanceManager *sharedInstance;
+ (InstanceManager *)sharedService{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[InstanceManager alloc] init];
});
return sharedInstance;
}
在ARC 与非ARC 混用 单例的时候
非ARC单例要去掉
- (id) retain
{
return self;
}