我想我在这里错过了一些非常基本的东西。我有一个实用工具类,它有一些从几个不同的类中调用的函数。我想能够包含Utilities.h并且只是说[Utilities doStuff]并且在Utilities.m中执行doStuff函数,那么执行此操作最简单的方法是什么?可可实用类
可可实用类
回答
最简单的方法是不要让Utilities成为一个类,除非有某些原因需要创建它的实例。由于本质上你的效用函数是一个没有共同主题的松散集合,所以没有理由试图强制一个面向对象的范例。 (与Java不同,在C语言中,并非每件事都必须在一个类中)。只需将它们定义为传统的C风格函数,并将它们称为它们。如果你真的想在不是对象的东西上使用括号表示,并且不属于任何应该是类的东西,那么你可以像其他人所建议的那样使用+表示法。
我同意先生未知(谷歌)。函数是语言的一部分。如果这是您想要的功能,那么使用它们并没有什么错或可耻的。 – Chuck 2009-06-06 03:20:51
使用#import "Utilities.h
导入使用公用程序类的.m文件中的标题。之后,你可以自由使用它的任何方法。请记住,如果你想调用类的方法(而不是创建一个Utilities对象的实例并调用该方法),则需要将其声明为类方法。为此,请使用+号而不是减号,例如+ (void)doStuff:(NSString *)aString;
。
如果上面的例子令人困惑,苹果有一些很好的解释面向对象编程的文档。
这可以用一个静态方法中的公用设施类来实现:
@interface公用事业
+(int)的doStuff;
@end
+号使得该方法静态的,而不是 - ,这是一个实例方法。
Objective-C的术语是“class method”。 – 2009-06-06 04:31:25
您需要的其他语言的Utility-classes的东西通常在Objective-C中更好地实现为Categories。这是添加到类而不创建子类。
而不是有一个StringUtitities类,你会为NSString类创建StringUtilities类别。这当然不是每一种情况都是如此,但对于许多实用工具类来说却是如此。
它在http://macdevelopertips.com/objective-c/objective-c-categories.html
中更详细地描述user57368同意,它的实现可能是显而易见的大多数,但不是很明显我,所以我虽然我会创建一个例子来说明可可/ 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通常会为你做这件事)。
- 1. 从类方法调用实例方法:可能或不可以?
- 2. 在可可类中使用'id'类型
- 3. 实例化T调用方法中的类可调用类
- 4. 最佳实践使用反应可可
- 5. 实例变量在子类中不可用?从我的超类
- 6. 可可类从JNI
- 7. 限制可能实现接口的类
- 8. 我可以自动实现类吗?
- 9. .NET如何实现可空类型?
- 10. 实体框架6与不可变类
- 11. 实现可序列化的类
- 12. 可以实例类型的DocumentListener
- 13. 弱实体是否可以有子类
- 14. 什么可以从元类实例化
- 15. 类实例可以自毁吗?
- 16. 可以通过实例和类访问的可覆盖属性
- 17. 是否有可能实现可空类型一样NullableOfInteger在VB6
- 18. 可可:在实例化类之间等待
- 19. 可可:awakeFromNib实例化一个NSView子类drawRect不工作
- 20. 可可:不完整的类'驱动程序'的实现
- 21. 使AS3/Flex类可扩展但不可实例化为对象?
- 22. 如何实现一个xml可保存/可加载的类?
- 23. 如何写可实现()实现可序列化的类型的字段
- 24. 用于在可变可可对象上实现-hash的技巧
- 25. 我可以指定一个类实例可以转换为某种类型吗?
- 26. 我可以限制哪些类可以实例化另一个类?
- 27. 可用的Servlet 3.0实现?
- 28. EC2实例可用带宽?
- 29. Nodejs:__call实现可用?
- 30. 是否可以在AWS RDS的特定可用区域中获取可用实例类型的列表?
我试过使用+类方法的方式,但现在我得到NSInvocation:警告:类'Utilities'的对象0x7480没有实现methodSignatureForSelector – bmalicoat 2009-06-06 03:09:45