我想我在这里遗漏了一些非常基本的东西。我有一个Utilities类,它有一些从几个不同的类调用的函数。我希望能够包含Utilities.h并只是说[Utilities doStuff]并在Utilities.m中执行doStuff功能,这是最简单的方法吗?
答案 0 :(得分:5)
最简单的方法是不要将Utilities设为类,除非有一些原因需要创建它的实例。由于本质上您的实用程序函数是一个没有共同主题的松散集合,因此没有理由尝试强制使用面向对象的范例。 (与Java不同,在基于C语言中,并非所有内容都必须在类中。)只需将它们定义为传统的C样式函数,并将它们称为它们。如果你真的想在不是对象的东西上使用括号表示法并且不属于任何应该是类的东西,那么你可以像其他人建议的那样使用+表示法。
答案 1 :(得分:4)
您需要的东西其他语言的实用程序类通常在Objective-C中更好地实现为类别。这是在不创建子类的情况下添加到类中。
您可以为NSString类创建StringUtilities类,而不是使用StringUtitities类。这当然不是在每种情况下都是如此,但对于很多实用类来说都是如此。
在http://macdevelopertips.com/objective-c/objective-c-categories.html
中有更详细的描述答案 2 :(得分:2)
同意user57368,它的实现对大多数人来说可能是显而易见的,但对我来说并不明显,所以我会创建一个示例来展示cocoa / xcode的细节:
您需要创建两个文件Utilities.h和Utilities.m
//Utilities.h
#if TARGET_OS_IPHONE
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#elif TARGET_OS_MAC
#import <Cocoa/Cocoa.h>
#endif
float randomfloatBetween(float min, float max);
//Utilities.m
#import "Utilities.h"
float randomfloatBetween(float min, float max)
{
float range= max-min;
float maxRandom = pow(2,31)-1;
srandom((int)[NSDate date]);
return random()/maxRandom*range + min;
}
然后在您想要使用声明函数的任何源中使用#import“Utilities.h”。
需要在应用程序目标下添加Utilities.m来编译源代码(Xcode通常会为您执行此操作)。
答案 3 :(得分:1)
使用#import "Utilities.h
导入使用实用程序类的.m文件中的标头。之后,您可以自由使用其任何方法。但请记住,如果要在类上调用方法(而不是创建Utilities对象的实例并在其上调用方法),则需要将其声明为类方法。要执行此操作,请使用+符号而不是减号,例如+ (void)doStuff:(NSString *)aString;
。
答案 4 :(得分:0)
这可以通过Utilities类中的静态方法实现:
@interface Utilities
+(int)doStuff;
@end
+符号使方法成为静态,而不是 - ,这是一个实例方法。