ios防止单例对象重复创建
#import "Person.h"
static Person *_instance;
@implementation Person
/** Person单例 */
+ (instancetype)sharedPerson
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[Person alloc] init];
});
return _instance;
}
/** 重写单例对象的alloc方法, 防止单例对象被重复创建 */
+ (instancetype)alloc
{
if (_instance) {
NSException *exception = [NSException exceptionWithName:@"重复创建单例对象异常" reason:@"请使用Person的单例方法." userInfo:nil];
[exception raise];
}
return [super alloc];
}
当Person对象被重复alloc创建的时候就会抛出异常:
[objc] view plain copy
Person *p1 = [Person sharedPerson];
Person *p2 = [[Person alloc] init];
抛出异常
*** Terminating app due to uncaught exception '重复创建单例对象异常', reason: '请使用Person的单例方法.'