2010-05-03 56 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