任何人都可以解釋爲什麼MyCLController類的單一實例樣品iPhone應用程序使用LocateMe發現hereiphone單一實例
以及保留,retainCount,釋放和自動釋放的首要?任何幫助將非常感謝!
任何人都可以解釋爲什麼MyCLController類的單一實例樣品iPhone應用程序使用LocateMe發現hereiphone單一實例
以及保留,retainCount,釋放和自動釋放的首要?任何幫助將非常感謝!
因爲在應用程序中只需要一個MyCLController實例。
該例中的單例實現是超防禦模式。它覆蓋了所有其他方法,以防止您有可能釋放實例。
就個人而言,我從來沒有過這樣的箍(和文檔將在未來被改變),寧願做一個死的簡單+ sharedInstance方法代替:
+ sharedInstance
{
static id sharedInstance = nil;
if (!sharedInstance) {
sharedInstance = [self alloc];
sharedInstance = [sharedInstance init];
}
return sharedInstance;
}
(1)是的,我分手了有用的alloc/init。它允許-init方法調用+ sharedInstance中的任何內容,而不會出現問題。 (2)不,這不涉及多線程。爲此,我使用GCD的dispatch_once()。在iPhone上,你需要一個稍微不同的模式。 @synchronized()的作品,但開銷。
其中一個原因就是爲什麼我發現防禦模式令人不安是因爲,坦率地說,如果你有一個單例類,並且導致它通過過度釋放而被釋放,那麼你的代碼就會被破壞,的bug不應該被掩蓋。如果有的話,代碼應該是災難性的。同樣,有很多情況下單個類也可能對個別實例有效。