Rya*_*yan 19 xcode cocoa objective-c ios
在编写iOS应用程序时,我会在哪里放置一个我打算在其他任何文件中使用的函数?
例如,将NSDate转换为相对时间字符串的函数("5秒前").我会创建一个类并使这些函数都是静态的吗?
jle*_*ehr 18
可以在任何方便的地方放置功能.如果可能在许多地方导入函数或函数组,则可以在它们自己的.h/.m对中声明和实现它们.例如,您可以在名为XYZDateUtilities.m的文件中实现日期转换功能,并在XYZDateUtilities.h中声明它.
使用static限定符声明函数会将其范围限制为声明它们的文件,因此您不希望这样做; 实际上你想做相反的事情 - extern在.h文件中声明它们,以便它们在其他文件中可见.
JRG*_*per 10
你有几个选择:
1)如果您正在扩展类的行为(例如您描述的NSDate字符串转换方法),则最好只在该类上创建一个类别.
这是关于iOS类别的教程:
http://mobile.tutsplus.com/tutorials/iphone/objective-c-categories/
重要的提示:
无论是否在另一个特定类的导入中包含标题(.h)文件,类别都会更改类的行为(如果您覆盖方法)
出于这个原因,通常最好不要通过类别覆盖方法,而是要在需要更改某些方法时创建子类.
但是,为了添加新方法,类别可以非常方便和有用.
2)如果要创建一个在任何地方导入的新类,可以创建所述类并将其标题导入#import "MyClass.h"到项目的prefix.pch文件中(默认情况下位于项目中的"支持文件"组下).
您放入prefix.pch文件的任何内容都可以在您的应用内的任何位置使用.这也是放置常量(例如字符串)或定义应用程序中许多类之间使用的枚举的有用位置.
我希望这有帮助.如果需要进一步澄清,请告诉我,我会尽力帮助您.
干杯!
另一种选择是为您的助手方法创建一个类,并将所有助手实现为类方法.
例如HelperClass.h
+ (NSString *)getFrenchCapital
Run Code Online (Sandbox Code Playgroud)
例如HelperClass.m
+ (NSString *)getFrenchCapital
{
return @"Paris";
}
Run Code Online (Sandbox Code Playgroud)
然后在任何需要的地方导入助手类,并简单地调用类方法:
例如,Foo.m
#import "HelperClass.h"
...
- (void)logFrenchCapital
{
NSLog(@"Capital of France: %@", [HelperClass getFrenchCapital]);
}
Run Code Online (Sandbox Code Playgroud)