实现自定义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
通过这种方式, YourCustomClass
inheritance了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类非常困难(在这种情况下)。
替代方案是:
- 使用类别
- 使用组合(在你的类中使用
NSMutableArray
实例变量)
最后,我还建议您阅读以下讨论: why-doesnt-my-nsmutablearray-subclass-work-as-expected 。 特别是,你必须注意到这一点
通常,您倾向于将系统类子类化为比C#或Java更少的子类。
斯蒂芬达林顿说。
通常,没有真正的用途来inheritance这类东西。 你最好使用一个类别。 但是,如果你真的坚持inheritance子类,那么你应该如何做到这一点。
首先,您的接口声明是错误的。 试试这种方式:
@interface AllCourses : NSMutableArray @end
此外,你不需要在你的可变数组中使用一个可变数组,你所要做的就是使用self,就像
[self addObject:];