@(设计模式学习)
注意:
大多数的开发者都认同使用
全局可变的状态
是不好的行为。太多状态使得程序难以理解
,难以调试
。不管什么情况下,我们都应该慎重考虑一下是否必须使用单例。单例应该只用来保存全局的状态,并且不能和任何作用域
绑>定。如果这些状态的作用域比一个完整的应用程序的生命周期
要短,那么这个状态就不应该使用单例来管理。
Objective-C实现
当我们调用单例的时候,不管是调用sharedInstance
方法还是通过alloc
和init
方法创建,或者copy
一份,都应该保证在内存中只有一份实例。避免单例递归死锁
。
.h文件
#importNS_ASSUME_NONNULL_BEGIN@interface Singleton : NSObject+(instancetype)sharedInstance;@endNS_ASSUME_NONNULL_END复制代码
.m文件
#import "Singleton.h"@implementation Singletonstatic Singleton *_instance = nil;+(instancetype)sharedInstance { if (_instance) { return _instance; } static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[self alloc] init]; }); return _instance;}+ (instancetype)allocWithZone:(struct _NSZone *)zone { if (_instance) { return _instance; } return [super allocWithZone:zone];}-(id)copy { return self;}-(id)mutableCopy { return self;}@end复制代码
swift实现
class Singleton { static let sharedInstance = Singleton() private init() {}}复制代码