版权归Aaidong所有〜转载需声名〜 欢迎大家访问:http://blog.csdn.net/aaidong
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
1.单例模式的要点:
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的优点:
1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
IOS中的单例模式
在objective-c中要实现一个单例类,至少需要做以下四个步骤:
具体请直接啃栗子
#import "QHBasicViewController.h"
@interface ResourceTabbarViewController : QHBasicViewController
+ (ResourceTabbarViewController *)shared;
@end
#import "ResourceTabbarViewController.h"
@implementation ResourceTabbarViewController
// 第一步:静态全局变量,始终指向实例化出的对象。
static ResourceTabbarViewController *sharedRTab = nil;
// 第二步:外界初始化得到单例类对象的唯一借口,这个类方法返回的就是sharedRTab,即类的一个对象,如果sharedRTab为空,则实例化一个对象,如果不为空,则直接返回。这样保证了实例的唯一。
+ (ResourceTabbarViewController *)shared{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedRTab = [[super allocWithZone:nil]init];
});
return sharedRTab;
}
// 第三步:重写allocWithZone方法
+(id)allocWithZone:(NSZone *)zone
{
return [ResourceTabbarViewController shared];
}
// 第四步:这两个方法是为了防止外界拷贝造成多个实例,保证实例的唯一性。
-(id)copy
{
return self;
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
// 可写可不写 一般放如初始化数据
- (id)init
{
if (sharedRTab){
return sharedRTab;
}
self = [super init];
return self;
}
@end