首页 > 代码库 > 单例设计模式
单例设计模式
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 : NSObjectinterfaceSingleton(Person);@end
//// Person.m#import "Person.h"@implementation PersonimplementationSingleton(Person)@end
单例设计模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。