2010-05-03 59 views
3

我有一堆函數,它會在我的應用程序中返回常用的UIViews,例如,iPhone:靜態方法vs. sharedManager Objective-C

+ (UIView *) getLikeRow:(CGRect) frame ofType:(LikeType) type 

到目前爲止,我一直在使用靜態方法,但最近我也注意到了sharedManager概念。現在我想知道是否應該爲此使用sharedManager。

使用靜態方法與sharedManager單例的實例方法有何區別和優點/缺點?

+0

可能的重複http://stackoverflow.com/questions/46541/when-should-you-use-the-singleton-pattern-instead-of-a-static-class – kennytm 2010-05-03 14:40:52

+0

我不認爲這是一個重複。設計問題與上一個問題有微妙但重要的區別。 – TechZen 2010-05-03 15:13:36

+0

感謝Kenny指出類似的問題。 – znq 2010-05-03 17:10:57

回答

7

在任何時候只有一個類的實例處於活動狀態很重要時,您可以使用單例/共享管理模式。

例如,應用程序只有一個UIApplication實例是非常重要的。您需要應用程序對象的兩個實例,因爲不可能將它們保持在同一狀態。 NSFileManager使用該模式來防止應用程序發生兩個相互衝突的文件操作。

強制一個獨特實例在運行時是使用單/共享管理模式的唯一有效的原因。

就你而言,你只需要一個方便的地方來停放一些實用程序類方法,這些方法不需要實例就可以運行。處理這個問題的最好方法是創建一個將所有類方法捆綁在一起的實用程序類。然後使用這些方法,您只需發送到類名像這樣:

UIView *theView=[MyViewUtilityClass getLikeRow:aRect ofType:aType]; 

這將導致MyViewUtilityClass從在該應用的任何調用該方法,而無需初始化的對象。比保持獨特的實例更容易和更簡潔。如果您在整個應用程序中使用實用程序方法,則可以將標題添加到.pch通用標題,並且所有自定義類都將自動獲取實用程序類。

但是,就像單例模式一樣,實用程序類方法可能會誘使你變得懶惰,並在他們不屬於的地方過度使用它們。過度使用,他們開始使應用程序看起來像一個老派的,非面向對象的C集合的獨立功能。這打破了封裝和模塊化,並使程序變得繁雜的程序代碼。

所以,要小心,你只是把最通用和最普遍的功能放入工具類中。如果你有很多處理特定類的函數,比如UIView和子類,那麼你應該把函數放在該類的類中。

+0

有道理。感謝非常詳盡和有用的答案。 – znq 2010-05-03 17:08:43