iPhone:Objective-C中的静态方法与sharedManager

时间:2010-05-03 14:39:58

标签: iphone objective-c static-methods

我有一堆函数可以在我的应用程序中返回常用的UIViews,例如

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

到目前为止,我一直在使用静态方法,但最近我也注意到sharedManager概念。现在我想知道是否应该为此使用sharedManager。

使用静态方法与sharedManager单例的实例方法有什么区别和优缺点?

1 个答案:

答案 0 :(得分:7)

当重要的是在任何时候只有一个类的实例存活时,使用单例/共享管理模式。

例如,重要的是应用程序只有一个UIApplication实例。您可能需要应用程序对象的两个实例,因为不可能将它们保持在相同的状态。 NSFileManager使用该模式来防止应用程序有两个相互冲突的文件操作。

在运行时强制使用唯一的 实例 是使用单例/共享管理模式的唯一正当理由。

在您的情况下,您只需要一个方便的位置来停放一些实用程序类方法,这些方法不需要实时实例才能运行。处理这种情况的最佳方法是创建一个将所有类方法捆绑在一起的实用程序类。然后使用这些方法,你只需发送类名:

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

这会导致MyViewUtilityClass从应用程序中的任何位置调用该方法,而无需初始化对象。它比保持一个独特的实例活着更容易和更整洁。如果您在整个应用程序中使用实用程序方法,则可以将标头添加到.pch通用标头中,所有自定义类将自动获取实用程序类。

然而,就像单例模式一样,实用程序类方法会诱使你变得懒惰,并在他们并不真正属于的地方过度使用它们。过度使用,他们开始使应用程序看起来像一个旧学校,非面向对象的独立功能的C集合。这打破了封装和模块化,使您的程序纠结于程序代码。

因此,请注意,您只是将最通用和最通用的函数放入实用程序类中。如果你有很多处理特定类的函数,比如UIView和子类,那么你应该将函数放在该类的一个类别中。