从两个类访问同一段代码

Posted

技术标签:

【中文标题】从两个类访问同一段代码【英文标题】:Accessing same piece of code from two classes 【发布时间】:2013-09-19 11:23:17 【问题描述】:

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

这段代码接受一个 NSString 并返回一个 NSArray。

目前同一段代码在两个类中重复。

有没有办法分开写,两个类调用呢?我试图在 NSArray 的子类中创建一个方法,但是由于 NSArray 是一个抽象类,因此存在很多问题。有什么建议吗?

谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

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

Customizing Existing Classes

【讨论】:

不要在这样的方法名中使用get,它在Cocoa的上下文中有更具体的含义。如果您将方法命名为get,通常意味着调用者负责提供缓冲区以get 输出。例如,请参阅NSArray 中的getObjects:range:NSString 中的getCharacters:range:,以及NSStream 中的getStreamsToHost:port:inputStream:outputStream:【参考方案2】:

您可以尝试创建一个 NSString 类别。此类别将返回数组。 例如:

//
//  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];

【讨论】:

【参考方案3】:

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

即:

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

使用[TheNameOfTheClass parseThisString:inputString] 调用。

当然,如果您在类的实例中尊重值,这将不起作用。

【讨论】:

以上是关于从两个类访问同一段代码的主要内容,如果未能解决你的问题,请参考以下文章

将两个类映射到同一张表

同时开左右两个SAPGUI编辑器显示同一段ABAP代码

同时开左右两个SAPGUI编辑器显示同一段ABAP代码

ThreadLocal

在同一类中获得更改的值?

两个 exe 是不是可以从 DLL 访问内存中的同一个对象?