首页 > 移动平台 > 详细

IOS中的单例模式

时间:2015-11-03 17:37:59      阅读:171      评论:0      收藏:0      [点我收藏+]

单 例类是一个非常重要的概念,因为它们表现出了一种十分有用的设计模式在.net等开发中也会经常遇到。单例类的应用贯穿于整个iPhone SDK中。例如,UIApplication类有一个方法叫sharedApplication,从任何地方调用这个方法,都将返回与当前正在运行的应用 程序相关联的UIApplication实例。

博主补充:单例类保证了应用程序的生命周期中有且仅有一个该类的实例对象,而且易于外界访问。

 

实现

你可以用以下代码实现一个Objective-C的单例类(ARC模式下):

 #import <foundation/Foundation.h>

@interface QHHManager : NSObject {
NSString *someProperty;
}
 
@property (nonatomic, retain) NSString *someProperty;
 
+ (id)sharedManager;
 
@end

QHHManager.h

 

 

 #import "QHHManager.h"

 
@implementation QHHManager
 
@synthesize someProperty;
  
+ (id)sharedManager {
static QHHManager  *sharedQHHManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedQHHManager = [[self alloc] init];
});
return sharedQHHManager;
}
 
- (id)init {
if (self = [super init]) {
someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
}
return self;
}
 
- (void)dealloc {
// 永远不要调用这个方法
}
 
@end

QHHManager.m

 

 

在这里我们定义了一个静态变量sharedQHHManager,然后仅初始化一次该变量。这里使用了dispatch_once以保证该变量只被GCD初始化一次。操作系统将保证这是线程安全的。

如果不使用GCD,你可以使用以下代码:

 (id)sharedManager {

static QHHManager * sharedQHHManager = nil;
@synchronized(self) {
if (sharedQHHManager == nil)
sharedQHHManager = [[self alloc] init];
}
return sharedQHHManager;
}
 

Non-GCD-based-code.m
 
接下来,当你需要使用这个单例对象时,你只要这样调用就可以了:
QHHManager *sharedManager = [sharedQHHManager sharedManager];
snippet_file_0.m
我在我的代码中广泛使用单例类,比如创建一个单例类来处理CoreLocation或CoreData功能。

IOS中的单例模式

原文:http://www.cnblogs.com/qihaohao07/p/4933725.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!