博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式:再严谨的单例也尽量不要使用
阅读量:6292 次
发布时间:2019-06-22

本文共 1021 字,大约阅读时间需要 3 分钟。

@(设计模式学习)

注意:

大多数的开发者都认同使用全局可变的状态是不好的行为。太多状态使得程序难以理解难以调试。不管什么情况下,我们都应该慎重考虑一下是否必须使用单例。单例应该只用来保存全局的状态,并且不能和任何作用域绑>定。如果这些状态的作用域比一个完整的应用程序的生命周期要短,那么这个状态就不应该使用单例来管理。

Objective-C实现

当我们调用单例的时候,不管是调用sharedInstance方法还是通过allocinit方法创建,或者copy一份,都应该保证在内存中只有一份实例。避免单例递归死锁

.h文件

#import 
NS_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() {}}复制代码

参考博客

转载地址:http://cqkta.baihongyu.com/

你可能感兴趣的文章
c语言学习之基础知识点介绍(六):if和switch结构
查看>>
elasticsearch 的Merge
查看>>
网络编程
查看>>
浅析GDAL库C#版本支持中文路径问题
查看>>
快学Scala 第八课 (嵌套类)
查看>>
Linux文件和目录的属性及权限
查看>>
Wannafly挑战赛3
查看>>
解决Ubuntu14.04安装Chrome浏览器打不开的问题
查看>>
INSERT IGNORE 与INSERT INTO的区别
查看>>
JQuery Easy UI 简介
查看>>
【转帖】【面向代码】学习 Deep Learning(四) Stacked Auto-Encoders(SAE)
查看>>
垂直剧中
查看>>
C语言版推箱子
查看>>
BeanPostProcessor出现init方法无法被调用Invocation of init method failed
查看>>
WIN7 X64的运行命令窗口
查看>>
JS Promise API
查看>>
探究JS中的连等赋值问题
查看>>
113. Path Sum II
查看>>
小程序 显示Toobar
查看>>
react列表数据显示
查看>>