gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:12 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

当一个类的一个实例在任何时候都处于事件状态很重要时,您可以使用单例/共享管理模式。

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

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

在您的情况下,您只需要一个方便的地方来放置一些不需要实时实例即可运行的实用程序类方法。处理这个问题的最佳方法是创建一个将所有类方法捆绑在一起的实用程序类。然后要使用这些方法,您只需像这样发送到类名:

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

这会导致 MyViewUtilityClass 从应用程序中的任何位置调用该方法,而无需初始化对象。它比让唯一实例保持事件状态更容易、更简洁。如果您在整个应用程序中使用实用程序方法,则可以将 header 添加到 .pch 通用 header ,所有自定义类都将自动获取实用程序类。

但是,就像单例模式一样,实用类方法可能会诱使您变得懒惰并在它们不属于的地方过度使用它们。过度使用,他们开始让应用程序看起来像一个老派的、非面向对象的独立函数的 C 集合。这破坏了封装和模块化,并使您的程序成为一堆过程代码。

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

关于iPhone:Objective-C 中的静态方法与 sharedManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2758810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com