我想创建自己的自定义对象NSMutableArray:
@interface Course : NSObject {
NSString *className;
NSString *classGrade;
NSInteger creditHours;
}
该课程将存储一系列课程:
@interface AllCourses : NSObject : NSMutableArray{
NSMutableArray *arrClasses;
}
我希望“AllCourses”继承自NSMutableArray,所以我可以像任何其他NSMutableArray对象一样使用它,并从中添加\ remove课程并将其加载到tableView等... 所以我的问题是,如果你会这么善良,我的“AllCourses”的实现应该是什么样的?
答案 0 :(得分:6)
首先。如果你想扩展一个类,你需要这样做:
@interface YourCustomClass : SuperClass
以这种方式,YourCustomClass
会继承SuperClass
的属性和/或方法。
关于您的问题,Apple doc在NSMutableArray Class Reference
中说通常没有理由继承NSMutableArray。班级 做得好它的目的 - 维持一个可变的,有序的 对象集合。
您可以在此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
类并获得一个功能齐全的类非常困难(在这种情况下)原来的。
替代方案是:
NSMutableArray
实例变量)最后,我还建议您阅读以下讨论:why-doesnt-my-nsmutablearray-subclass-work-as-expected。特别是,你必须注意
正如 Stephen Darlington 所说的那样。通常,您倾向于将系统类子类化为次要的次数 你会用C#或Java。
答案 1 :(得分:1)
通常,对这类东西进行子类化并没有什么用处。你最好使用一个类别。但是,如果你真的坚持继承子类,那么你应该如何做到这一点。
首先,您的界面声明是错误的。试试这种方式:
@interface AllCourses : NSMutableArray
@end
此外,你不需要在你的可变数组中使用一个可变数组,你所要做的就是使用self,比如
[self addObject:<your object here>];