用alloc和init在objective-C中初始化一个实例



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

NSDate *now = [NSDate date];

现在我看到上面的代码可以写成这样

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

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

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

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

通常,像[[NSDate alloc] init]这样的方法调用将实例化所请求类型的新默认对象,因此您可能期望不会将其设置为任何日期/时间。然而,默认的NSDate对象实际上是用当前日期和时间初始化的,正如文档中讨论的那样,所以在这个特殊的情况下,它们相同的东西。

作为题外话,与大多数nsoobject一样,您也可以调用[NSDate new]来获得与[[NSDate alloc] init]相同的效果(因此在这种情况下与[NSDate date]相同)。

最新更新