我來到這個防空火炮的邁克灰「關懷和單身的餵養」,是一點點被他的評價puzzeled:邁克灰辛格爾頓:配售@synchronized
此代碼是有點慢,但。 取鎖有點貴。 讓它更痛苦的是事實上絕大多數時候,鎖定是毫無意義的。當foo爲零時鎖只有 ,其中 基本上只發生一次。 單身人初始化後,需要 的鎖不見了,但鎖本身 依然存在。
+(id)sharedFoo {
static Foo *foo = nil;
@synchronized([Foo class]) {
if(!foo) foo = [[self alloc] init];
}
return foo;
}
我的問題是,有無疑是一個很好的理由,但你爲什麼不能寫(見下文),以限制鎖時,foo是零?
+(id)sharedFoo {
static Foo *foo = nil;
if(!foo) {
@synchronized([Foo class]) {
foo = [[self alloc] init];
}
}
return foo;
}
歡呼加里
啊好了,基本上你需要的@synchronize塊內的支票? – fuzzygoat 2010-03-10 17:16:33
這就是@synchronized的全部要點:一次只允許一個線程進行檢查。 – 2010-03-10 17:17:54
嘗試使用dispatch_once()代替:http://stackoverflow.com/q/5720029/290295 – ctpenrose 2011-12-16 20:41:31