单例

  1. 应用程序只分配一份内存.

  2. 第一次调用alloc就不崩溃,其他都崩溃,其实就是抛异常。

  3. 提供share方法,获取单例对象.

  4. 使用静态全局变量保存单例对象.

苹果的单例

  1. 不能外界调用alloc,一调用就崩掉,其实就是抛异常

    第一次调用alloc就不崩溃,其他都崩溃

  2. 提供一个方法给外界获取单例

  3. 内部创建一次单例,什么时候创建,程序启动的时候创建单例
@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

results matching ""

    No results matching ""