Objective c 如何将NSDate子类化?

Objective c 如何将NSDate子类化?,objective-c,nsdate,Objective C,Nsdate,我第一次尝试将NSDate子类化,以提供我需要的两个方法。编译很好,但在运行时,我试图访问它,但得到一个错误 假设我只想要子类中未修改的当前日期: [myNSDate date]; 我得到了错误 -[NSDate initWithTimeIntervalSinceReferenceDate:]: method only defined for abstract class. Define -[myNSDate initWithTimeIntervalSinceReferenceDate:

我第一次尝试将NSDate子类化,以提供我需要的两个方法。编译很好,但在运行时,我试图访问它,但得到一个错误

假设我只想要子类中未修改的当前日期:

[myNSDate date];
我得到了错误

-[NSDate initWithTimeIntervalSinceReferenceDate:]: method only defined for 
 abstract class.  Define -[myNSDate initWithTimeIntervalSinceReferenceDate:]!

有什么不同

NSDate是一个类集群,您不应该对其方法返回的底层类型做出任何假设,也不应该尝试将其子类化,除非您确切知道自己在做什么。如果要扩展它,请使用类别进行扩展

NSD的回答正确,我只想简单地重申一下
NSDate
不是一个简单的类,您可以很容易地将其子类化。它是一个,简而言之,这意味着当您获得类型为
NSDate
的值时,它实际上是另一个私有类的实例,该类具有与
NSDate
相同的接口。换句话说,
NSDate
不是您想要的子类

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

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

@implementation NSDate (MyExtensions)
- (void) doFoo {
    NSLog(@"Foo");
}
@end

现在您可以调用
[datedofoo]
。另请参见Mike Ash的一篇文章。

嗨,NSD,不明白你的回答有点苛刻,但基本上是正确的。iFloh,阅读一些关于Objective-C中的类别的内容。它们可能会解决您的问题。嗨,Zoul,谢谢您的解释和URL。我还没来。多么简单:)