实现自定义NSMutableArray

我想创建自己的自定义NSMutableArray自定义对象:

@interface Course : NSObject { NSString *className; NSString *classGrade; NSInteger creditHours; } 

这个类将存储一系列课程:

  @interface AllCourses : NSObject : NSMutableArray{ NSMutableArray *arrClasses; } 

我希望“AllCourses”inheritance自NSMutableArray,所以我可以像任何其他NSMutableArray对象一样使用它,并从中添加\ remove课程并将其加载到tableView等…所以我的问题是,如果你会这么善良,是我对“AllCourses”的实现应该是什么样的?

首先。 如果要扩展类,则需要执行以下操作:

 @interface YourCustomClass : SuperClass 

通过这种方式, YourCustomClassinheritance了YourCustomClass属性和/或方法。

关于您的问题,Apple doc在NSMutableArray类参考中说

通常没有理由inheritanceNSMutableArray。 该类很好地完成了它的设计 – 维护一个可变的,有序的对象集合。

您可以在此stackoverflow主题中找到相同的建议: should-i-subclass-the-nsmutablearray-class 。

如果你想要NSMutableArray ,请参阅第一个链接(NSMutableArray类参考)。 您必须覆盖5个方法(请参阅Ovveride方法一节)。

在我看来,你可以用传统方式使用NSMutableArray :创建一个NSMutableArray实例并向其添加对象(这里是一个简单的例子)。

 NSMutableArray *myArray = [[NSMutableArray alloc] init]; NSNumber *myNumber = [NSNumber numberWithInt:2]; [myArray addObject:myNumber]; 

希望能帮助到你。

编辑

要覆盖方法,请在.m文件中插入该方法并在其中添加一些逻辑。 例如(这里只是伪代码):

 //.h @interface YourClass: NSMutableArray @end //.m @implementation YourClass - (void)insertObject:(id)anObject atIndex:(NSUInteger)index { // your logic here } // do the same for other ones @end 

但是 ,我再次建议您找到一种不同的方法来实现它,因为扩展NSMutableArray类并获得像原始类一样的全function类非常困难(在这种情况下)。

替代方案是:

  1. 使用类别
  2. 使用组合(在你的类中使用NSMutableArray实例变量)

最后,我还建议您阅读以下讨论: why-doesnt-my-nsmutablearray-subclass-work-as-expected 。 特别是,你必须注意到这一点

通常,您倾向于将系统类子类化为比C#或Java更少的子类。

斯蒂芬达林顿说。

通常,没有真正的用途来inheritance这类东西。 你最好使用一个类别。 但是,如果你真的坚持inheritance子类,那么你应该如何做到这一点。

首先,您的接口声明是错误的。 试试这种方式:

 @interface AllCourses : NSMutableArray @end 

此外,你不需要在你的可变数组中使用一个可变数组,你所要做的就是使用self,就像

 [self addObject:];