標籤:
#import "SingalTon.h"
@implementation SingalTon
//執行個體變數不能在靜態方法中使用
//需要定義成全域變數或者靜態變數
static SingalTon * _singleTon=nil;
+(SingalTon *) ShareSingleTon
{
// 返回對象前需要判斷,這個對象之前是否建立過,如果沒有建立過,就需要建立一個對象,如果建立過,就把上一次建立的對象返回出去
// 多個線程同時訪問單例類時,就會建立多個單例類,就需要加鎖;
@synchronized(self)
{
if (_singleTon == nil)
{
_singleTon=[[self alloc]init];
}
}
return _singleTon;
}
//需要重寫alloc方法,保證其他使用者在使用alloc方法時候建立,也只建立一個對象
//+(id)alloc
//{
// @synchronized(self)
// {
// if (_singleTon==nil)
// {
// _singleTon=[super alloc];
// }
//
// }
// return _singleTon;
//}
//在alloc方法內部會調用allocWithZone這個方法
//使用allocWithZone方法時候不調用alloc方法,所以只用對allocWithZone進行重寫就好
+(id)allocWithZone:(struct _NSZone *)zone
{
@synchronized(self)
{
if (_singleTon==nil)
{
_singleTon=[super allocWithZone:zone];
}
}
return _singleTon;
}
//如果在MRC(手動記憶體管理) 中, 對象是有 copy retain release autorelease 這些操作的
/*-(id)retain
{
return _singleTon;
}
-(void)release
{
}
-(id)autorelease
{
return _singleTon;
}
-(id)copy
{
return _singleTon;
}
-(NSUInteger)retainCount
{
return 1;
}*/
在appdeledate直接使用alloc初始化和調用單例類方法初始化將是同一個地址/對象
單例類的建立