单例
应用程序只分配一份内存.
第一次调用alloc就不崩溃,其他都崩溃,其实就是抛异常。
提供share方法,获取单例对象.
使用静态全局变量保存单例对象.
苹果的单例
不能外界调用alloc,一调用就崩掉,其实就是抛异常
第一次调用alloc就不崩溃,其他都崩溃
提供一个方法给外界获取单例
- 内部创建一次单例,什么时候创建,程序启动的时候创建单例
@interface Person : NSObject
// 获取单例
+ (instancetype)sharePerson;
@end
#import "Person.h"
@implementation Person
// 程序启动时候创建对象
// 静态变量
static Person *_instance = nil;
// 作用:加载类
// 什么调用:每次程序一启动,就会把所有的类加载进内存
+ (void)load
{
NSLog(@"%s",__func__);
_instance = [[self alloc] init];
}
+ (instancetype)sharePerson
{
return _instance;
}
+ (instancetype)alloc
{
if (_instance) {
// 标示已经分配好了,就不允许外界在分配内存
// 抛异常,告诉外界不运用分配
// 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
// 创建异常类
// name:异常的名称
// reson:异常的原因
// userInfo:异常的信息
NSException *excp = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance." userInfo:nil];
// 抛异常
[excp raise];
}
// super -> NSObject 才知道怎么分配内存
// 调用系统默认的做法, 当重写一个方法的时候,如果不想要覆盖原来的实现,就调用super
return [super alloc];
}
@end