#import <Foundation/Foundation.h>
@interface Singleton : NSObject
@property(nonatomic,assign)int a;
//单例通常有一个创建方法(或者叫获取方法),用于获取这个实例
//这个方法是类方法 方法名通常以shared/ main/ current/default等开头 后面是类名
+(Singleton*)sharedSingleton;
/*
+(Singleton *)mainSingleton;
+(Singleton*)currentSingleton;
+(Singleton*)defaultSingleton;
*/
@end
#import "Singleton.h"
@implementation Singleton
static Singleton* instance=nil;//创建一个存在于静态区的指针
+(Singleton*)sharedSingleton
{
@synchronized(self)
{//同时进行叫并发,同步是有顺序的,需要先完成某些条件才能运行;类似于排队.在一个对象访问synchronized的时候,别人就不能再访问了,只能等待.....解决了多线程访问的安全性.(也叫:同步锁)
if (instance)
{
return instance;
}
instance=[[Singleton alloc]init];//如果没有内容,则让指针指向堆中的一块空间;
//关键点是,只在堆中创建一次空间,供大家使用;
//此处可以 初始化 一些实例变量
}
return instance;
}
//static Singleton *instance=nil;
//+(Singleton*)sharedSingleton
//{
// @synchronized(self){
// if (!instance) {
// instance=[[Singleton alloc]init];
// }
// }
// return instance;
//}
+(id)allocWithZone:(struct _NSZone *)zone
{ //调alloc时调用allocWIthZone方法;类似于+的指定初始化方法
@synchronized(self)
{
if (instance)
{
return instance;
}
instance=[[super allocWithZone:zone]init];
}
return instance;
}
-(oneway void)release
{
//空实现 引用计数不会-1了, 就算外界误用了release也不会把我的单例对象给释放掉;
}
//重写autorelease 避免外界 释放我们
-(id)autorelease
{
return instance;
}
-(id)retain
{
return instance;
}
-(id)copyWithZone:(NSZone*)zone
{
return instance;
}
-(id)mutableCopyWithZone:(NSZone*)zone
{
return instance;
}
@end