如何在Objective-C中设置非实例化的类(只使用方法的类)

时间:2011-05-18 17:20:04

标签: iphone objective-c ios class

我希望在Objective-C中为一个专注于获取数据的iOS项目创建一个类。我熟悉类通常如何工作,setter和getter方法和变量。但是,对于这个类,因为它只执行一个函数(返回NSMutableArrays),我不想创建类的实例来使用类中的方法。

我知道如何能够整齐有效地做到这一点吗?

5 个答案:

答案 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,所以我写这个代码基本上是在我的头顶(并使用上面的网站中的一些代码作为提醒)。所以我提前为任何错误道歉;)