0

我有一个子类,NSMutableArray它实际上处理某种类型的数据,例如Employee。问题是我不喜欢等的固有名称,addObject insertObject并且想将它们更改为addEmployee insertEmployee.

我应该如何处理?

4

3 回答 3

3

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

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

@interface Employer : NSObject {
  NSMutableArray *employees;
}

- (void) addEmployee: (Employee *) employee;
@end

像这样。NowaddObject:不适用于 Employee 实例;只addEmployee:工作。此外,您只想像 finally 那样专门化方法filteredArrayWithPredicate:- 所以继承它们不会是一个优势。

于 2013-04-25T22:03:06.430 回答
0

您添加一个方法addEmployee:并在该调用中addObject:。类似的insertObject:

于 2013-04-25T21:59:52.583 回答
0

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

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

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

参考:

如何在 iPhone Objective C 头文件中将函数标记为已弃用?

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

于 2013-04-25T22:10:20.733 回答