我如何继承NSDate?

4 objective-c nsdate

我第一次尝试subClassed NSDate给它我需要的2种方法.编译很好,但在运行时我尝试访问它我得到一个错误.

让我们说我只想要在subClass中未修改的当前日期:

[myNSDate date];
Run Code Online (Sandbox Code Playgroud)

我收到了错误

-[NSDate initWithTimeIntervalSinceReferenceDate:]: method only defined for 
 abstract class.  Define -[myNSDate initWithTimeIntervalSinceReferenceDate:]!
Run Code Online (Sandbox Code Playgroud)

有什么不同吗?

zou*_*oul 7

NSD的答案核心,我只想简单地重申一下.NSDate不是一个简单的类,你可以很容易地子类.它是一个类集群,简而言之,当你得到一个类型的值时NSDate,它实际上是一个具有相同接口的不同私有类的实例NSDate.换句话说,NSDate不是你想要的子类.

如果您只想添加方法(而不是实例变量),可以使用类别轻松完成:

@interface NSDate (MyExtensions)
- (void) doFoo;
@end

@implementation NSDate (MyExtensions)
- (void) doFoo {
    NSLog(@"Foo");
}
@end
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话了[date doFoo].另请参阅Mike Ash 的类集群子类化教程.