单例iOS
来源:互联网 发布:淘宝商城女打底衫 编辑:程序博客网 时间:2024/05/18 02:14
参考:http://ios.9tech.cn/news/2013/1028/38276.html
单例的保证应用程序的生命周期中有且仅有一个该类的实例对象,而且易于外接访问
下面分别是arc于非arc情况下的单例实现
arc
所谓arc就是自动引用计数的意思,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成。
@interface RecordDB : NSObject
+(RecordDB *)sharedInstance;
@end
@implementation RecordDB
//arc模式下
+ (id *)sharedInstance{
static RecordDB *_instance = nil;
static dispatch_once_t onceToken;//检测bloc是否完成
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
- (id)init{
if (self = [super init]) {
}
return self;
}
@end
在这里面我们定义了一个静态变量_instance,仅初始化一次该变量。
这里用了GCD中dispatch_once以保证该变量只被GCD初始化一次。
如果不用GCD,可以用如下
+ (id *)sharedInstance{
static RecordDB *_instance = nil;
@synchronized(self){
if (_instance == nil) {
_instance = [[self alloc] init];
}
}
return _instance;
}
当需要使用这个单例对象时,你只要调用就可以了:
非arc代码
@interface RecordDB : NSObject
+(RecordDB *)sharedInstance;
@end
static RecordDB *_instance = nil;
@implementation RecordDB
+ (id)sharedInstance{
@synchronized(self){
if (_instance == nil) {
_instance = [[super allocWithZone:NULL] init];
}
return _instance;
}
}
+ (id)allocWithZone:(struct _NSZone *)zone{
return [[self sharedInstance] retain];
}
- (id)copyWithZone:(NSZone *)zone{
return self;
}
- (id)retain{
return self;
}
- (unsigned)retainCount{
return UINT_MAX;//永不释放
}
- (oneway void)release{
}
- (id)autorelease{
return self;
}
- iOS单例模式
- iOS 单例模式
- IOS 单例模式
- iOS单例
- iOS 单例模式
- IOS 单例
- IOS 单例
- IOS单例模式
- ios单例模式
- iOS单例
- iOS 单例,委托
- iOS 单例模式
- iOS 单例模式
- IOS单例模式
- ios单例Singleton
- iOS 单例
- iOS 单例浅谈
- IOS 之 单例
- 用R解析Mahout用户推荐协同过滤算法(UserCF)
- 挑战程序设计竞赛 01背包变换对象
- 自定义maven仓库
- 究竟什么是RDD
- 第5周-项目4-一般函数-求点类中距离-区别成员函数、友元函数和一般函数
- 单例iOS
- css--float
- OSG坐标问题
- 85. PHP 命名空间概述
- 第5周-项目6-复数模板类
- Number of 1 Bits
- 安卓学习笔记05--测试
- linux文件目录结构
- eclipse项目转maven项目