Objective-C:何时使用函数vs方法

ari*_*old 5 objective-c

我已经开始使用Xcode的重构功能(编辑>重构>提取)并注意到Xcode提供了提取方法函数.

我已经在这里其他地方读到了两者之间的差异,并且理解一个方法是连接到一个类而一个函数不是.所以我不是在寻找定义.

假设不涉及任何参数,何时使用一个而不是另一个?我明白,如果某些事情不是关于这个类,那么它可能是一个函数,但同样,这只是定义.我正在寻找好的用例.

在我个人的情况下,我试图从AppDelegate中重构一些代码applicationDidEnterBackground.由于它是进入后台处理事件的唯一场所,清理代码的唯一方法是将子程序提取到..井,函数中.但是他们会在AppDelegate.m中,所以他们不是方法吗?

嗯..

Cod*_*aFi 9

就个人而言,我只在满足以下两个要求的情况下才使用函数:

  1. 我经常在一个给定的类或整个项目中使用它,它保证一般化.
  2. 它没有副作用或上下文依赖性(没有一个void *context混乱).

在我看来,C风格的函数应该仅作为最后的手段使用,或者在您真正需要此类应用程序中的功能行为的情况下使用.事件处理既是特定于应用程序的,也是上下文敏感的,因此最好是单独留下并专注于重构常见模式.


CRD*_*CRD 4

当你有一个函数时,你就可以使用函数;-) 你知道定义:方法有一个隐式参数self,并且可以使用它访问实例变量;函数没有隐式参数——它需要的一切都必须传入。

如果您要重构较大方法的一部分,该部分不会访问实例变量,并且您不会重构它以便子类可以覆盖它,然后让 Xcode 为您构建一个函数。完成后添加static它,这样它对于类来说是私有的。

这样做你没有丢失任何东西,并且清楚地表明这段代码是一个函数- 它不会改变对象的状态。

当然,选择函数和方法之间没有硬性界限,它的边界是模糊的。例如,如果一段代码仅访问一个或两个实例变量但不更新它们,那么您可能会选择一个函数 - 再次明确对象状态没有被修改。但是您不想将大量实例变量作为参数传递,这很难阅读(而且效率低下)。

使用函数可能是件好事,而且在 Objective-C 中这样做当然也不错。