oc中单例
?
單例在程序設(shè)計中很常用,objective c中單例的寫法與java等其他語言有些差別
官方建議?
由于自己設(shè)計單態(tài)模式存在一定風(fēng)險,主要是考慮到可能在多線程情況下會出現(xiàn)的問題,因此蘋果官方建議使用以下方式來實現(xiàn)單態(tài)模式:
static MyGizmoClass * sharedGizmoManager = nil;?
+ (MyGizmoClass*)sharedManager?
{?
??? @synchronized(self) {?
??????? if (sharedGizmoManager == nil) {?
??????????? [[self alloc] init]; // assignment not done here?
??????? }?
??? }?
??? return sharedGizmoManager;?
}?
//為了確保有且只有一個實例,有必要覆蓋一下+ (id)allocWithZone:(NSZone *)zone 這個方法,如果不小心調(diào)用了alloc方法,則又會創(chuàng)建一個實例
+ (id)allocWithZone:(NSZone *)zone?
{?
??? @synchronized(self) {?
??????? if (sharedGizmoManager == nil) {?
??????????? sharedGizmoManager = [super allocWithZone:zone];?
??????????? return sharedGizmoManager;? // assignment and return on first allocation?
??????? }?
??? }?
??? return nil; //on subsequent allocation attempts return nil?
}?
覆蓋下面幾個方法同樣也是確保在程序生命周期中有且只有一個實例,
- (id)copyWithZone:(NSZone *)zone?
{?
??? return self;?
}?
- (id)retain?
{?
??? return self;?
}?
- (unsigned)retainCount?
{?
??? return UINT_MAX;? //denotes an object that cannot be released?
}?
- (void)release?
{?
??? //do nothing?
}?
- (id)autorelease?
{?
??? return self;?
}
轉(zhuǎn)載于:https://www.cnblogs.com/X-Code/archive/2013/02/14/2911262.html
總結(jié)
- 上一篇: 实现远程关机
- 下一篇: [转]我们为什么需要工作流