寫一個線程安全的單利
如下寫法:
@implementation DFManager
+ (instancetype)sharedInstance{
static DFManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[super allocWithZone:NULL] init];
});
return instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
return [DFManager sharedInstance];
}
- (id)copyWithZone:(NSZone *)zone{
return self;
}
- (id)mutableCopyWithZone:(NSZone *)zone{
return self;
}
@end
以上:
DFManager *manager = [DFManager sharedInstance];
NSLog(@"obj1 = %@", manager);
DFManager *manager1 = [[DFManager alloc] init];
NSLog(@"obj1 = %@", manager1);
DFManager *manager2 = [manager1 copy];
NSLog(@"obj1 = %@", manager2);
結果:內存地址是一樣的。