单例设计模式
Posted iFat的笔记本
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例设计模式相关的知识,希望对你有一定的参考价值。
1.单例模式概念
-
什么是单例模式:(Singleton)
- 单例模式的意图是让类的对象成为系统中唯一的实例。
-
什么情况下使用单例?
- 1、类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方 法。
- 2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
-
单例设计模式的要点:
- 1) 某个类只能有一个实例。
- 2)他必须自行创建这个对象
- 3)必须自行向整个系统??供这个实例;
- 4)为了保证实例的唯一性,我们必须将
- 5)这个方法必须是一个静态类
2.简单的单例模式实现
Singleton.h
// 以后就可以使用interfaceSingleton来替代后面的方法声明 #define interfaceSingleton(name) +(instancetype)share##name #if __has_feature(objc_arc) // ARC #define implementationSingleton(name) + (instancetype)share##name { name *instance = [[self alloc] init]; return instance; } static name *_instance = nil; + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[super allocWithZone:zone] init]; }); return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } - (id)mutableCopyWithZone:(NSZone *)zone { return _instance; } #else // MRC #define implementationSingleton(name) + (instancetype)share##name { name *instance = [[self alloc] init]; return instance; } static name *_instance = nil; + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[super allocWithZone:zone] init]; }); return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } - (id)mutableCopyWithZone:(NSZone *)zone { return _instance; } - (oneway void)release { } - (instancetype)retain { return _instance; } - (NSUInteger)retainCount { return MAXFLOAT; } #endif
// // Person.h #import <Foundation/Foundation.h> #import "Singleton.h" @interface Person : NSObject interfaceSingleton(Person); @end
// // Person.m #import "Person.h" @implementation Person implementationSingleton(Person) @end
以上是关于单例设计模式的主要内容,如果未能解决你的问题,请参考以下文章