单例类

单例类   特点 

有统一初实化对象方法,只能创建一个实例对象

单例类可以用于传值操作

1.实现一个统一的初始化方法

2.声明一个统一当前类的指针 然后指向nil

3.重写allocWithZone 方法

4.对资源进行加锁     使用@synchroized  (self )  或者 使用  NSLock  

系统提供的单例类 

APPDelegate  

NSFileManager

NSUserDefaults

NSNotification



单例类的创建  synchronized  这种方式创建;

staticCustomWebCacheSingleton*webCachesingleton =nil;

+(CustomWebCacheSingleton  *)Singleton

{

@synchronized(self)

{

if(!webCachesingleton)

{

webCachesingleton=[[selfalloc]init];

}

returnwebCachesingleton;

}

}

+(id)allocWithZone:(struct_NSZone*)zone

{

@synchronized(self)

{

if(!webCachesingleton)

{

webCachesingleton=[super  allocWithZone:NULL];

}

returnwebCachesingleton;

}

}

 -(id)init

{

self=[superinit];

if(self)

{

_imgDictionary=[[NSMutableDictionary  alloc] initWithCapacity:0];

}

return  self;

}


//使用GCD来创建  单例类

+(CustomWebImageCache*)singleTon

{

staticCustomWebImageCache*customCache=nil;

staticdispatch_once_tonce;

if(!customCache) {

dispatch_once(&once, ^{

customCache=[[selfalloc]init];

});

}

returncustomCache;

}

+(id)  allocWithZone:(struct_NSZone*)zone

{

staticCustomWebImageCache*customCache=nil;

staticdispatch_once_tonce;

if(!customCache) {

dispatch_once(&once, ^{

customCache=[super   allocWithZone:NULL];

});

}

return   customCache;

}

//重写init方法在该方法内部将字典创建因为只创建一个字典多以找到的字典也只有一个字典初始化方法中的init也是只执行一次

-(id)init

{

self=[super  init];

if (self)  {

NSLog(@"-------------*******");

_dictionary=[[NSMutableDictionary   alloc]initWithCapacity:0];//在这里需要创建可变的字典将来可以将图片放进来;

}

return  self;

}


使用互斥锁的 NSLock 这个类:

NSLock*lock=[[NSLock   alloc]init];

[lock  lock];//加锁 解锁,对内容进行加锁/解锁操作;

[lock  unlock];

你可能感兴趣的:(单例类)