详解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
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!