单例设计
2014-01-13 16:10
309 查看
单例:单例确保一个类只有一个实例,而且自行实例化,并向整个类提供这个实例。
@implementation Ants
static Ants
*shareAt=nil;//声明静态变量,作用域是在整个程序周期
+(Ants*)shareAnts//单例方法
{
@synchronized(self){//使用线程保护
if
(shareAt==nil) {//判断是否实例化成功
shareAt=[[self
alloc]init];
}
return
shareAt;//返回已创建或存在的变量
}
}
PS:官方建议写法
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+
(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if
(sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first
allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
-
(id)copyWithZone:(NSZone *)zone
{
return self;
}
-
(id)retain
{
return self;
}
-
(unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
-
(void)release
{
//do
nothing
}
-
(id)autorelease
{
return self;
}
@implementation Ants
static Ants
*shareAt=nil;//声明静态变量,作用域是在整个程序周期
+(Ants*)shareAnts//单例方法
{
@synchronized(self){//使用线程保护
if
(shareAt==nil) {//判断是否实例化成功
shareAt=[[self
alloc]init];
}
return
shareAt;//返回已创建或存在的变量
}
}
PS:官方建议写法
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+
(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if
(sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first
allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
-
(id)copyWithZone:(NSZone *)zone
{
return self;
}
-
(id)retain
{
return self;
}
-
(unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
-
(void)release
{
//do
nothing
}
-
(id)autorelease
{
return self;
}