objective-c中的实用方法

Cha*_*lie 5 objective-c

我应该将实用方法放在objective-c中?

例如,由多个类调用的其他路径处理实用程序方法.

我已经看到了将它们放在主appdelegate文件中的示例,因此可供所有人使用.然而,这对我来说似乎有点奇怪......

sho*_*sti 6

你有几个选择:

  • 最简单的方法是为常见任务提供一组C函数(如果使用.m扩展,则可以在C函数中使用Objective-C对象).例如,您可以从代码中调用showAlertDialog().
  • 您可以拥有一个"实用程序类",其中包含一组导入到每个文件的类方法.例如,你可以打电话+[MyUtilities showAlertDialog].这是Java中静态实用程序类的最直接等价物,但它在Objective-C中有点笨拙.
  • 正如Paul Lynch所说,另一个选择是使用类别来扩展公共类.唯一的问题是它可能导致可维护性问题.它也只适用于扩展已存在的类,并且只有在您不需要访问ivars时才有效.您可以使用一个类别来NSObject使所有对象都可以访问这些方法,但我强烈建议不要这样做(这可能会导致严重的可维护性问题).

就个人而言,我使用了选项1和3的混合.当我的功能明显与特定的现有类绑定时,我使用类别.否则,我使用C函数.


Pau*_*nch 1

是的,这很奇怪(而且是不好的做法)。

最常见的习惯用法可能是使用类别来扩展现有的系统类。在某些情况下,如果没有合适的系统类,有些人可能会创建一个主要由类方法组成的实用程序类,或者一个具有实例方法的单例类。

这取决于方法以及它们在整个应用程序结构中的位置(并且始终是事物背后的 MVC)。