我是初学者(编程)学习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];
我意识到我的问题可能有一个非常简单的答案,但这本书没有解释任何“为什么会这样工作”的问题。
答案 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年的范围内产生亚毫秒精度。