9

我在同一个代码中遇到了另一个问题......我收到了这个错误:

初始化方法 -initWithCharactersNoCopy:length:freeWhenDone: 不能发送到类的抽象对象 NSString_RegEx: 创建一个具体实例!

但我不明白错误或我应该做什么......

编辑:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding];
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent];
4

1 回答 1

15

你看到这个是因为 NSString 是一个类集群。请参阅此处的Apple 文档以获得一般解释,并在此处查看专门关于子类化 NSString 的注释。基本上,NSString 是一个抽象类,没有存储字符的方法,各种 -initWith... 方法都根据初始化的方法返回不同的 NSString 的具体子类。通常,当您使用 NSString 时,这是完全透明的。但是,如果你想继承 NSString,你必须至少实现基本方法(-length 和 -characterAtIndex:) 以及你想要的任何 init 方法(另外,显然,有一种存储字符串字符的方法)。

如果您只想向 NSString 添加功能,通常不需要子类化。首先,你应该检查一个类别,或者一个在 NSString 上运行的函数,或者一个包含 NSString 的类上的方法是否会更好地工作。例如,请参阅RegexKitGoogle Toolbox For Mac,它们都使用 NSString 上的类别实现正则表达式支持。

于 2010-04-03T16:49:18.457 回答