详解IOS 单例的两种方式
详解IOS单例的两种方式
方法一:
#pragmamark-
#pragmamarksharedSingletonmethods
//单例函数
staticRtDataModel*sharedSingletonManager=nil;
+(RtDataModel*)sharedManager
{
@synchronized(self){
if(sharedSingletonManager==nil){
sharedSingletonManager=[[selfalloc]init];
}
}
returnsharedSingletonManager;
}
+(id)allocWithZone:(NSZone*)zone
{
@synchronized(self){
if(sharedSingletonManager==nil){
sharedSingletonManager=[superallocWithZone:zone];
returnsharedSingletonManager;//assignmentandreturnonfirstallocation
}
}
returnnil;//onsubsequentallocationattemptsreturnnil
}
-(id)copyWithZone:(NSZone*)zone
{
returnsharedSingletonManager;
}
-(id)retain
{
returnsharedSingletonManager;
}
-(NSUInteger)retainCount
{
returnUINT_MAX;//denotesanobjectthatcannotbereleased
}
-(onewayvoid)release
{
//donothing
}
-(id)autorelease
{
returnsharedSingletonManager;
}
//单例函数结束
方法二:
.h文件
#import@interfaceRtTestDataModel:NSObject { NSMutableArray*_buyDataTArray; NSMutableArray*_sellDataTArray; } +(RtTestDataModel*)sharedManager; -(void)addOptionBuyDataArrayModel:(NSMutableArray*)DataArray; -(NSMutableArray*)getOptionBuyDataArrayModel; @end
.m文件
#import"RtTestDataModel.h"
@implementationRtTestDataModel
+(RtTestDataModel*)sharedManager
{
staticRtTestDataModel*sharedManager=nil;
staticdispatch_once_tpredicate;
dispatch_once(&predicate,^{
sharedManager=[[RtTestDataModelalloc]init];
});
returnsharedManager;
}
-(void)dealloc
{
[_buyDataTArrayremoveAllObjects];
[_buyDataTArrayrelease];
[superdealloc];
}
-(id)init
{
self=[superinit];
if(self!=nil){
_buyDataTArray=[[NSMutableArrayalloc]initWithCapacity:8];
}
returnself;
}
-(void)addOptionBuyDataArrayModel:(NSMutableArray*)DataArray{
if(DataArray!=nil){
[_buyDataTArrayremoveAllObjects];
[_buyDataTArrayaddObjectsFromArray:DataArray];
}
}
-(NSMutableArray*)getOptionBuyDataArrayModel{
return_buyDataTArray;
}
@end
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!