1.单例概述
- 如果一个类在整个程序运行过程中只需要创建一次,且每次调用都指向同一块内存空间,那么我们称这个类是单例(例如UI Application,播放器实例等等)
2.单例实现原理(代码)
#import <Foundation/Foundation.h>
@interface Person : NSObject
+(instancetype)sharedPerson;
@end
#import "Person.h"
static Person *p = nil;
@implementation Person
+(void)load{
[self sharedPerson];
}
+(instancetype)sharedPerson{
static dispatch_once_t once_t;
dispatch_once(&once_t, ^{
p = [[self alloc] init];
});
return p;
}
+(instancetype)alloc{
if (p) {
NSException *exce = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance." userInfo:nil];
[exce raise];
}
return [super alloc];
}
@end
- 获取Person实例对象,必须使用sharedPerson类方法,使用allocl方法会直接报错