单例那点事

单例用途

资源共享(多个类都会用到这块资源)而且和APP的生命周期等长。

单例代码

#import "SingletonClass.h"
static SingletonClass *singleton;

@implementation SingletonClass

+ (void)initialize{
    [SingletonClass sharedInstance];
}

+ (instancetype)sharedInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        singleton = [[SingletonClass alloc]init];
    });
    return singleton;
}

- (instancetype)init{
    if (self = [super init]) {
        if (singleton) {
            return singleton;
        }
    }
    return self;
}

@end
重写initialize和init方法目的是为了,无论是通过[SingletonClass sharedInstance]创建,还是
通过[[SingletonClass alloc]init]创建都保证是同一个单例。

alloc和init区别

alloc分配内存空间
init初始化数据

两者区别就像你造了一张A4纸(alloc),然后在纸上素描(init)

load和initialize区别

load文件被加载时就会调用,与complile sources中文件的位置有关系。
initialize第一次调用该类时候调用。
单例那点事_第1张图片
comlile sources

单例那点事_第2张图片

你可能感兴趣的:(单例那点事)