19

在编写 iOS 应用程序时,我应该在哪里放置我打算从任何其他文件中使用的函数?

例如,将 NSDate 转换为相对时间字符串(“5 secs ago”)的函数。我会创建一个类并使这些功能全部静态吗?

4

4 回答 4

18

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

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

于 2012-12-29T05:05:34.280 回答
11

你有几个选择:

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

这是一个关于iOS类别的教程:

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

重要的提示:

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

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

但是,对于添加新方法,类别可能非常方便和有用。

2) 如果您想创建一个在任何地方都导入的新类,您可以创建该类并将其头导入,即#import "MyClass.h",放入您的项目prefix.pch文件中(默认在项目中的“支持文件”组下找到)。

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

我希望这有帮助。让我知道是否需要进一步澄清,我会尽力提供帮助。

干杯!

于 2012-12-29T04:44:20.330 回答
6

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

例如HelperClass.h

+ (NSString *)getFrenchCapital

例如HelperClass.m

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

然后在需要的地方导入你的帮助类,并简单地调用类方法:

例如Foo.m

#import "HelperClass.h"

...

- (void)logFrenchCapital
{
    NSLog(@"Capital of France: %@", [HelperClass getFrenchCapital]);
} 
于 2014-05-20T00:43:00.750 回答
0

如果您在一个类中将所有函数设为静态,那么替代方法是在 .m 文件中定义函数,在 .h 文件中定义外部函数,就像您在 C 中所做的那样。

于 2012-12-29T04:35:00.360 回答