【问题标题】:static functions vs normal class function静态函数与普通类函数
【发布时间】:2016-02-09 14:50:34
【问题描述】:

我需要在我的应用程序中经常显示一个活动指示器,所以我编写了一个这样的类。 导入基金会

class ActivityIndicator
{
    static func startActivityIndicator(mainView:UIView)
    {
        let activityIndicator = UIActivityIndicatorView()
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge
        activityIndicator.color = UIColor.grayColor()
        activityIndicator.center = mainView.center
        activityIndicator.startAnimating()
        mainView.addSubview(activityIndicator)
    }
}

我将“startActivityIndi​​cator”函数设为静态只是因为它看起来很干净。我只想知道,如果我们在应用程序中加载大量静态函数,是否会对性能或内存造成任何影响。 有没有人能指点一下?

【问题讨论】:

  • 我做了这样的事情,但我没有创建一个新类,而是扩展了 UIViewController 类。
  • 我本可以这样做,但我需要一个通用的实现,我可以在不同的视图控制器、导航控制器、tableviewcontroller 或自定义视图等中显示。

标签: ios swift performance memory-management static


【解决方案1】:

在底层,静态函数与实例函数的不同之处仅在于它采用隐式参数的方式:实例函数为self 采用一个隐式参数,而静态函数不采用任何隐式参数。

就函数的代码而言,静态或非静态函数不会受到任何惩罚。性能也是如此:静态函数是可执行代码的最简单的轻量级“包”;打电话给他们不会产生额外费用。

但是,您的特定实现可能会受益于将activityIndicator 存储在变量中以避免在每个静态调用中重新创建它。此外,一旦活动完成,这将使您更容易从超级视图中删除活动指示器。如果您想使用单个activityIndicator,您可以保持您的函数静态,并为activityIndicator 添加一个类变量。否则,您应该创建多个 ActivityIndicator 类实例,每个实例都有自己的 activityIndicator 实例变量。在这种情况下,startActivityIndicator 也应该成为实例方法。

【讨论】:

    【解决方案2】:

    令人惊奇的是,就性能而言,使用静态方法会更好,因为您不必创建类的任何实例来调用它们。

    因此,如果您想从 100 个不同的地方调用它,对于普通函数,您将创建 100 个类的实例,利用内存,而对于静态,您不会创建任何实例,因此内存使用量大大减少。

    P.S.:数字 100 只是为了显示差异的强度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多