使用alloc和init初始化objective-C中的实例

时间:2014-06-16 08:35:03

标签: objective-c

我正在学习Objective-C,而我刚刚阅读了有关alloc和int方法的内容。在此之前,当我想创建一个NSDate实例时,我编码:

NSDate *now = [NSDate date];

现在我看到上面的内容可以这样写了

NSDate *now = [[NSDate alloc] init]; 

以上是否做同样的事情?正如我已经理解(希望是正确的)第一个创建和NSDate的实例,通过将消息日期发送到类NSDate。第二个,它只是为实例分配空间并初始化它,以便它可以工作。

1 个答案:

答案 0 :(得分:2)

如果您不熟悉NSDate,您会认为基于Objective-C的背景知识,您列出的两件事绝对不一样。但事实上,在这种情况下,它们是相同的。

[NSDate date]正在调用NSDate类方法,该方法返回设置为当前日期和时间的NSDate对象。

通常,像[[NSDate alloc] init]这样的方法调用会实例化所请求类型的新默认对象,因此您可能希望不会将其设置为任何日期/时间。但是,默认的NSDate对象实际上是使用当前日期和时间as discussed in the documentation初始化的,因此在这种特殊情况下,它们 是相同的。

顺便说一句,与大多数NSObject一样,您也可以调用[NSDate new]来获得与[[NSDate alloc] init]相同的效果(因此在这种情况下效果与[NSDate date]相同)。