13、单例模式
来源:互联网 发布:英语造句软件下载 编辑:程序博客网 时间:2024/06/02 02:40
单例设计模式
·基本概念
单例设计模式运用较为普遍、广泛且较为简单的设计模式之一,它的设计原理是:始终返回一个实例,即一个类始终只有一个实例。
创建单例的基本步骤
·声明一个单件对象的静态实例,并初始化为nil。
·创建一个类的类工厂方法,生成一个该类的实例,当且仅当这个类的实例为nil时
·覆盖allocWithZone:方法,确保用户(程序员)在直接分配和初始化对象时,不会产生另一个对象。
·实现NScopying协议,覆盖release、autorelease、retain、retainCount方法, 以此确保单例的状态。
·在多线程的环境中,注意使用@synchronized关键字,确保静态实例被正确的创建 和初始化。
//UserContext.h#import <Foundation/Foundation.h>@interface UserContext : NSObject<NSCopying>@property(nonatomic,copy)NSString *userName;@property(nonatomic,copy)NSString *email;+ (id)shareUserContext;@end
//UserContext.m#import "UserContext.h"static UserContext *segtonInstance = nil;@implementation UserContext+ (id)shareUserContext { @synchronized(self){ if (segtonInstance == nil) { segtonInstance = [[[self class] alloc] init]; } } return segtonInstance;}#pragma mark - 下面的方法为了确保只有一个实例对象+ (id)allocWithZone:(NSZone *)zone { if (segtonInstance == nil) { segtonInstance = [super allocWithZone:zone]; } return segtonInstance;}- (id)copyWithZone:(NSZone *)zone { return segtonInstance;}- (id)retain { return segtonInstance;}- (oneway void)release {}- (id)autorelease { return segtonInstance;}- (NSUInteger)retainCount { return UINT_MAX;}@end
#import <Foundation/Foundation.h>#import "UserContext.h"int main(int argc, const char * argv[]){ @autoreleasepool { UserContext *userContext = [UserContext shareUserContext]; UserContext *userContext2 = [UserContext shareUserContext]; UserContext *userContext3 = [[UserContext alloc] init]; UserContext *userContext4 = [userContext copy]; [userContext release]; [userContext release]; [userContext release]; [userContext release]; NSLog(@""); } return 0;}
0 0
- 13、单例模式
- 设计模式(13)--单例模式
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- redis 命令讲解
- Unbutu下mysql的启用/停止/重启
- 判断某个界面是否在前台
- JAVA 注解的几大作用及使用方法详解
- MAC 设置gdb调试
- 13、单例模式
- ReactJS简单介绍
- jquery中ajax同步、异步区别
- 点和向量的转换 Transforming Points and Vectors
- HTML:transition属性学习
- Windows7下,完全、彻底卸载Oracle
- PAT 1024. Palindromic Number (25)(字符串对称,相加)
- linux中PCI总线驱动
- 21个优质Swift开源App