我会在Objective C中放置一个全局效用函数?

时间:2012-12-29 04:29:33

标签: objective-c ios xcode cocoa

在编写iOS应用程序时,我会在哪里放置我打算在其他任何文件中使用的功能?

例如,将NSDate转换为相对时间字符串(“5秒前”)的函数。 我会创建一个类并使这些函数都是静态的吗?

4 个答案:

答案 0 :(得分:18)

可以在任何方便的地方放置功能。如果可能在许多地方导入函数或函数组,则可以在它们自己的.h / .m对中声明和实现它们。例如,您可以在名为 XYZDateUtilities.m 的文件中实现日期转换功能,并在 XYZDateUtilities.h 中声明它。

使用static限定符声明函数会将其范围限制为声明它们的文件,因此您不希望这样做;实际上你想做相反的事情 - 在.h文件中将它们声明为extern,以便它们在其他文件中可见。

答案 1 :(得分:10)

您有几个选择:

1)如果您正在扩展类的行为(例如您描述的NSDate字符串转换方法),最好只在该类上创建一个类别。

以下是关于iOS类别的教程:

http://mobile.tutsplus.com/tutorials/iphone/objective-c-categories/

重要提示:

类别在项目中的任何地方更改类的行为(如果您覆盖方法),无论您是否在另一个特定类的导入中包含标题(.h)文件

出于这个原因,通常最好通过类别覆盖方法,而是如果要更改某些方法则创建子类。

但是,要添加新方法,类别可以非常方便和有用。

2)如果要创建一个随处导入的新类,可以创建所述类并将其标题导入(即#import "MyClass.h")放入项目的prefix.pch文件中(在“支持”下找到)文件“默认情况下在项目中的组。”

您放入prefix.pch文件的任何内容都可以在您的应用内的任何位置使用。这也是放置常量(例如字符串)或定义在应用程序中的许多类中使用的枚举的有用位置。

我希望这会有所帮助。如果需要进一步澄清,请告诉我,我会尽力帮助。

干杯!

答案 2 :(得分:6)

另一种选择是为你的助手方法创建一个类,并将所有助手实现为类方法。

e.g。的 HelperClass.h

+ (NSString *)getFrenchCapital

e.g。的 HelperClass.m

+ (NSString *)getFrenchCapital
{
    return @"Paris";
}

然后在任何需要的位置导入助手类,只需调用类方法:

e.g。的 Foo.m

#import "HelperClass.h"

...

- (void)logFrenchCapital
{
    NSLog(@"Capital of France: %@", [HelperClass getFrenchCapital]);
} 

答案 3 :(得分:0)

如果你在一个类中使所有函数都是静态的,那么另一种方法就是在.m文件中定义函数,在.h文件中定义extern函数,就像你在C中做的那样。