从两个类访问相同的代码

时间:2013-09-19 11:23:18

标签: ios objective-c ipad cocoa-touch

我有两个类,每个类都有一个使用相同代码的实例方法。

这段代码采用NSString并返回NSArray。

目前,这两个类中重复了相同的代码。

有没有办法单独编写并通过两个类调用它?我试图在NSArray的子​​类中创建一个方法,但由于NSArray是一个抽象类,因此存在许多问题。有什么建议吗?

谢谢。

3 个答案:

答案 0 :(得分:4)

不是子类化NSArray,而是扩展类行为的正确方法是在该类上创建一个类别。

因此,您可以在NSString上创建一个返回数组的类别,在将该类别导入项目后,您可以将其称为NSString的一部分,例如:

NSString *myString = @"Hello";
NSArray *myArray = [myString generateArrayFromString];

您可以在此处找到有关如何创建类别的指南:

Customizing Existing Classes

答案 1 :(得分:1)

您可以尝试制作NSString类别。此类别将返回该数组。 E.g:

//
//  NSString+MyCategory.h

#import 

@interface NSString (MyCategory)

-(NSArray *)myMethod;

@end

//
//  NSString+MyCategory.m

#import "NSString+MyCategory.h"

@implementation NSString (MyCategory)

-(NSArray *)myMethod {
    NSArray *_arr = [self componentsSeparatedByString:@","];
    return _arr;
}

@end

然后在您的课程中(或您在代码中想要的任何内容),您可以导入类别:

#import "NSString+MyCategory.h"

然后在任何字符串上使用它:

NSArray *myArray = [anyString myMethod];

答案 2 :(得分:0)

从它的声音(将字符串解析为NSArray,引用类的实例字段),您可以使该方法成为类(vs实例)方法并从任一类调用它。

即:

+(NSArray*)parseThisString:(NSString*)theString {
    doSomething;
    return result;
}

使用[TheNameOfTheClass parseThisString:inputString]调用。

当然,如果你在课堂实例中摒弃价值观,那么这项工作就无法发挥作用。