IOS 之 单例的实现
来源:互联网 发布:域名注册哪个服务器好 编辑:程序博客网 时间:2024/06/03 18:43
1. 单例的概念
单例模式就是一个类只有一个实例,也就是一个对象,它是唯一的。它的生命周期和应用程序绑定。在应用程序结束前,这个实例是共享的。
2. 命名规则
这个规则是习惯性的规则,并不是强制的,一定要这样命名。
一般这样:share + 你的类名 或者 default + 你的类名
3. 单例设计模式的优缺点
主要有点:
1. 提供了对唯一实例的受控访问,可以在不同的窗口进行数据的传递。
2. 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
主要缺点:
1. 由于单利模式中没有抽象层,因此单例类的扩展有很大的困难
2. 滥用单例将带来一些负面问题,如:为了节省资源将数据库连接池对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
实现过程:
拿国王这个类来创建一个单例类
#import <Foundation/Foundation.h>@interface Kingdom : NSObject <NSCopying>+ (Kingdom *)sharedKindom;@property (nonatomic, assign) NSInteger age;@end
#import "Kingdom.h"@implementation Kingdom// GCD 模式static Kingdom *singleton = nil;+ (Kingdom *)sharedKindom{// onceToken 令牌用来标识,一旦调用,就被设置,作为唯一标示符// dispatch_once 类似一把锁static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{singleton = [[self alloc] init];});return singleton;}+ (id)allocWithZone:(NSZone *)zone{static dispatch_once_t onceToken;NSLog(@"onceToken : %ld", onceToken);dispatch_once(&onceToken, ^{singleton = [super allocWithZone:zone];});return singleton;}- (id)copyWithZone:(NSZone *)zone{return self;}// MRC 环境下/*static Kingdom *singleton = nil;+ (Kingdom *)sharedKindom{@synchronized(self) {if (singleton == nil) {singleton = [[self alloc] init];}}return singleton;}+ (id)allocWithZone:(NSZone *)zone{@synchronized(self) {if (singleton == nil) {singleton = [super allocWithZone:zone];}}return singleton;}- (id)copyWithZone:(NSZone *)zone{return self;}- (oneway void)release{}- (id)autorelease{return self;}- (NSUInteger)retainCount{return INT_MAX;}*/// ARC 环境下/*static Kingdom *singleton = nil;+ (Kingdom *)sharedKindom{@synchronized(self) {if (singleton == nil) {singleton = [[self alloc] init];}}return singleton;}+ (id)allocWithZone:(NSZone *)zone{@synchronized(self) {if (singleton == nil) {singleton = [super allocWithZone:zone];}}return singleton;}- (id)copyWithZone:(NSZone *)zone{return self;}*/@end
0 0
- IOS 之 单例的实现
- IOS学习之单例的实现
- iOS之 实现单例的步骤和具体实例:
- iOS 单例的实现
- ios 单例的实现
- IOS单例的实现
- ios单例的实现
- iOS实现单例
- IOS单例实现
- iOS单例模式的实现
- iOS singleton单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例的两种实现
- tarjan求lca
- 配置tomcat 6.0的环境变量
- 49 计数排序 O(n)
- 使用STC14F104W单片机捕获PWM脉宽
- J2EE的13个规范之(二) JDBC 及其使用
- IOS 之 单例的实现
- java基础:父类与子类之间变量和方法的调用
- 50 二叉树距离 割点
- selection algorithm(待整理)
- 51 和为n连续正数序列
- HDU 3830 Checkers
- 装饰器模式
- 递归之全排列
- Android Canvas绘图详解(图文)