我希望在Objective-C中为一个专注于获取数据的iOS项目创建一个类。我熟悉类通常如何工作,setter和getter方法和变量。但是,对于这个类,因为它只执行一个函数(返回NSMutableArrays),我不想创建类的实例来使用类中的方法。
我知道如何能够整齐有效地做到这一点吗?
答案 0 :(得分:3)
这在Objective-C中有点不典型。由于Objective-C中的类实际上不具有普通函数可用的状态(即没有类变量),因此在大多数情况下,从未实例化的类相对无用。这种功能的常规设计模式是:
单身人士课程(如果你需要很多州)
一组功能(如果没有)
答案 1 :(得分:2)
你想制作类方法吗?
@interface Foo : NSObject {}
+(NSMutableArray*)someClassMethod:(id)params;
@end
...
@implementation Foo
+(NSMutableArray*)someClassMethod:(id)params {
// whatever implementation
return nil;
}
@end
...
NSMutableArray* array = [Foo someClassMethod:nil];
答案 2 :(得分:2)
如果你只是在执行函数,并且你不需要支持子类化等,为什么不把它们写成C函数而不是带有方法的类呢?
答案 3 :(得分:2)
如果这只是一个执行某些功能的类,你可以把它写成C函数。
在您的标题文件中 -
NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2);
在您的实施文件中 -
NSMutableArray *functionThatReturnsMutableArray(NSObject *param1, NSString *param2)
{
...
return aMutableArray;
}
只需在您的类中包含需要这些函数的.h文件并直接调用它们。
NSMutableArray *anArray = functionThatReturnsMutableArray(param1, param2);
答案 4 :(得分:0)
根据您正在做的事情(相同的NSString操作,UIView操作等),您可以实现一个类别(我回答a question yesterday并附上以下说明 - 为方便起见而复制;)。
类别使用其他方法扩展现有类,或使用现有方法的版本扩展。例如,假设您要添加一个将字符串的第一个字母返回给NSString的方法。为此,您将创建一个类别,如下所示:
界面 - JULString.h
#import NSString
@interface NSString (JULString)
-(NSString *) firstLetter;
@end
实现 - 典型的约定是类别的文件名是您要扩展的类的名称,后跟“+”和类别的名称。在这种情况下,文件将被称为 NSString + JULString.m
#import "NSString+JULString.h"
@implementation NSString ( JULString )
- (NSString *)firstLetter
{
return [NSString stringWithFormat:@"%C", [self characterAtIndex:1]];
}
@end
关于类别的巧妙之处在于,现在它们扩展了您正在使用的类的任何实例的行为。换句话说,应用程序中的任何NSString都将使用您的新方法(前提是您导入正确的头文件)。但要注意,因为强大的力量带来了巨大的责任。使用类别行为覆盖类可能会导致不良影响,因此要小心。
您可能想要检查的几个链接是:
注意:的 我没有我的Mac,所以我写这个代码基本上是在我的头顶(并使用上面的网站中的一些代码作为提醒)。所以我提前为任何错误道歉;)