更改子类的方法名称

时间:2013-04-25 21:57:35

标签: iphone ios objective-c

我有NSMutableArray的子类,实际上处理某种类型的数据,例如Employee。问题是我不喜欢addObject insertObject等等的名称,并希望将其更改为addEmployee insertEmployee

我该如何处理?

3 个答案:

答案 0 :(得分:3)

如果您不打算继承超类的方法,那么就不应该使用那个超类!

当你继承它时,它是子类和超类之间的'是'关系。 “Employer是一个NSMutableArray” - 不,这不是真的,因此不会使Employer成为NSMutableArray的子​​类。此外,将来您可能会使用字典来存储员工(例如映射'name' - >'employee'),然后将表示作为数组继承而无法正常工作。

@interface Employer : NSObject {
  NSMutableArray *employees;
}

- (void) addEmployee: (Employee *) employee;
@end
像这样。现在addObject:对Employee的实例不起作用;只有addEmployee:有效。另外,你最终只想专门研究像filteredArrayWithPredicate:这样的方法 - 所以继承它们不会有好处。

答案 1 :(得分:0)

您可以在该调用addEmployee:中添加方法addObject:。类似于insertObject:

答案 2 :(得分:0)

您可以继承NSMutableArray并添加-addEmployee:等方法,然后将其添加到.h文件中:

- (void)addObject:(id)anObject __attribute__((unavailable("Use -addEmployee:")));

这是一个clang扩展名,会导致编译错误。

参考文献:

How do I flag a function as being deprecated in an iPhone Objective C header file?

http://clang.llvm.org/docs/LanguageExtensions.html#messages-on-deprecated-and-unavailable-attributes