1

我是一名 c++ 和 c 程序员,而且我是 Objective-C 世界的新手,所以我在理解它的工作原理时遇到了一些问题,这里有一个简短的代码,这让我很困惑,

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
    @autoreleasepool {
NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);
double seconds = [now timeIntervalSince1970];
NSLog(@"It has been %f seconds since the start of 1970.", seconds);
}
return 0; }

现在是指向对象类型 NSdate 我的问题是为什么我们不能这样做:

   double seconds = [NSDate timeIntervalSince1970];

通常第一部分是对象的类型,第二部分是方法如果这是一个不好的问题,我很抱歉,但我想从一开始就很好地理解 Objective-C。谢谢

4

2 回答 2

0

你可以做类似的事情

[NSDate timeIntervalSinceReferenceDate];

虽然本案的参考日期是 2001 年 1 月 1 日

但是,这是一个类方法。你可以在课堂上调用它。

其他方法,例如 timeIntervalSince1970 是实例方法,需要在类的实际对象上调用。在 NSDate 的情况下,自 1970 年以来的时间间隔没有类方法。

如果你真的想要,你可以在 NSDate 上添加一个 Category 并添加一个执行此操作的类方法。

于 2013-09-17T16:28:36.483 回答
0

这是一个类方法:

NSDate *now = [NSDate date];

您不需要对象的实例。

这是一个实例方法:

[now timeIntervalSince1970];

你需要和对象的实例。

在 C++ 中与:Class::classMethod() 和 myClass::instanceMethod() 相同

更多信息在这里:

https://softwareengineering.stackexchange.com/questions/191856/what-is-a-static-method-compared-to-instance-class-private-public-methods

于 2013-09-17T16:28:47.663 回答