单例外部环境不可控,内部可控。所有要保证单例唯一,就只有在其.m内实现。
使用情景
高频率去生产一个对象,然后又释放。让多个不相关的类共享数据。
创建单例
.h
//
// SafeSingleton.h
// OC基础
//
// Created by FYJMac on 2018/5/2.
// Copyright © 2018年 FYJMac. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface SafeSingleton : NSObject
//创建或获取单例对象
+ (instancetype)sharedSafeSingleton;
//注销单例对象
- (void)cancelShare;
@end
.m
//
// SafeSingleton.m
// OC基础
//
// Created by FYJMac on 2018/5/2.
// Copyright © 2018年 FYJMac. All rights reserved.
//
#import "SafeSingleton.h"
@implementation SafeSingleton
static SafeSingleton *singleton;
//load是第一次加载该类时触发(不管有没有调用);initialize时第一次使用该类时触发
+ (void)initialize
{
[SafeSingleton sharedSafeSingleton];
}
+ (instancetype)sharedSafeSingleton
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singleton = [[SafeSingleton alloc] init];
});
return singleton;
}
//防止被创建多个
+ (instancetype)alloc
{
if (singleton) {
//抛出一个异常,通常是在写框架的时候用到
NSException *exception = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Singleton indtance." userInfo:nil];
[exception raise];
}
return [super alloc];
}
- (void)cancelShare
{
singleton = nil;
}
网友评论