在编写iOS应用程序时,我会在哪里放置我打算在其他任何文件中使用的功能?
例如,将NSDate转换为相对时间字符串(“5秒前”)的函数。 我会创建一个类并使这些函数都是静态的吗?
答案 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中做的那样。