2016-07-20 46 views
4

爲什麼蘋果沒有他們的類純單,例如,即使UIApplication類,您可以訪問到的UIApplication單,如:可可單和共享的情況下

UIApplication *sharedApplication = [UIApplication sharedApplication]; 

沒有什麼能阻止你明確實例一個UIApplication實例,如:

UIApplication *newApplication = [[UIApplication alloc] init]; 

但是,結果是運行時異常。該例外清楚地表明,在任何時候只有一個UIApplication類的實例可以存在。

那麼,爲什麼不通過在默認初始值返回相同的實例有純單身?

我問這個問題有清晰,對我的項目創造單時,要遵循哪種方式更好。所有的

回答

1

首先,你是對的:什麼蘋果稱之爲單身既不在被廣泛接受的定義,真正的單身也不是Apple's definition

[...]而用一個單獨的類,可以存在每個進程的類的只有一個實例

然而,實施一個共享實例是很容易在夫特:

class SomeManager { 
    static let sharedInstance = SomeManager() 
} 

在Objective-C中,兩種方法(單例和共享實例)都是可實現的,但共享實例更容易再次實現。

另一方面,使用共享實例模式沒有缺點。你應該遵循它。

BTW:你不共享的情況下,所有病例得到一個異常。有些課程可讓您分配第二個實例,類似於非法。

0

這是一個標準的蘋果提出,我們的開發人員遵循,使應用程序。

簡而言之,蘋果公司並沒有將他們的課程設置爲Singletons作爲設計選擇。而且,再次涉及到針對UIApplication的運行時異常,每個應用程序只有一個UIApplication實例。

你只是不能創建自己的UIApplication,只要你喜歡。它打破了規則。

但是,我們作爲開發人員可以隨時在我們的應用程序中隨時創建和使用單例。而且,蘋果也不同意我們這樣做。

重要的是你用什麼樣的設計選擇來開發應用程序!蘋果有他們的方式,我們有我們的方式!而且,只要工作,大家都很開心!

至於正確的方式,只是不存在。你一直沿着這條路走下去。

由於開發人員的經驗以及在特定時間尋求最佳選擇的原因,Apple選擇了這種模式。而且,直到今天一直很好。假設有一天它會中斷,那麼Apple會很樂意改變他們的標準。

而且,關於您最後一個關於要遵循哪種標準或模式的問題,您可以按照您感覺最舒適的方式進行操作。這是您的設計選擇!

親切的問候,
網速慢阿迪卡里

+0

蘋果並沒有做任何隨意,我只是想知道這是什麼特別的方式背後的原因(利益),這就是爲什麼我問這個問題。我和eveybody知道事情運作良好,所以不需要爲此寫回答。 親切的問候, Ajay –

+0

那麼,我會尋找一個答案,你會接受先生!爲我們兩人學習的時間! – Ariel

相關問題