网站普遍的创建单例类的方法有下面两种:
+ (instancetype)sharedManager { static id _sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedInstance = [[self alloc] init]; }); return _sharedInstance; }
+ (instancetype)sharedManager { static id _sharedInstance = nil; @synchronized(self) { if (_sharedInstance == nil) _sharedInstance = [[self alloc] init]; } return _sharedInstance; }
但是该如何避免意外的用[[alloc] init]
创建呢?主要是发现网上找到的大多仅仅只有上面的代码,少有考虑被init
或者copy
的情况
(instancetype)init {
@throw [NSException exceptionWithName:@"Disable" reason:@"Please use init instead..." userInfo:nil];
return self;
}
一周热门 更多>