为什么我不能存储timeIntervalSince1970返回值到指针?

时间:2014-10-31 11:26:46

标签: objective-c pointers

我是初学者(编程)学习Objective-C。 Xcode不允许我从NSDate对象中分配返回值;我很困惑。

NSDate *now = [NSDate date];
long seconds = [now timeIntervalSince1970];

如果我使用指针存储秒数:

long *seconds = [now timeIntervalSince1970];

我看到了错误:

  

使用不兼容类型'NSTimeInterval'(又名'double')的表达式初始化'long *'

为什么我不能说“给我now.timeIntervalSince1970的返回值并坚持这个地址”?

另一个问题是,为什么我不能初始化一个对象并在不需要指针的情况下使用它?这不起作用。

NSDate dateObject = [NSDate date];

我意识到我的问题可能有一个非常简单的答案,但这本书没有解释任何“为什么会这样工作”的问题。

2 个答案:

答案 0 :(得分:4)

这是因为[NSDate timeIntervalSince1970]将值NSTimeInterval作为typedef d double返回,这是一种基本类型,而不是对象类型。

该值计算自1970年1月1日以来的秒数,并且不需要是对象。

可以将它存储在指针中,但这很愚蠢:

NSTimeInterval *elapsed = (NSTimeInterval *)malloc(sizeof(NSTimeInterval));
*elapsed = [now timeIntervalSince1970];
...
free(elapsed);

答案 1 :(得分:1)

timeIntervalSince1970返回NSTimeInterval,其类型为double。在Apple文档中,您将看到此定义为

<强>目标c

typedef double NSTimeInterval; 

<强>夫特

typealias NSTimeInterval = Double 

和double是基元而不是对象类型,因此不应该是指针(不应该在Apple documentation中)。 Apple文档还说明了以下内容

  

NSTimeInterval总是以秒为单位指定;它在10,000年的范围内产生亚毫秒精度。

以下是Apple Documentation