iOS防止單例物件被重複建立
阿新 • • 發佈:2019-02-18
#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的單例方法.'