#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
}
当Person对象被重复alloc创建的时候就会抛出异常:
Person *p1 = [Person sharedPerson];
Person *p2 = [[Person alloc] init]; // 重复创建
异常抛出:
*** Terminating app due to uncaught exception '重复创建单例对象异常', reason: '请使用Person的单例方法.'