为什么在使用objective-c之前不需要初始化某些对象?

时间:2011-05-13 13:12:48

标签: objective-c cocoa cocoa-design-patterns

为什么在使用objective-c之前不需要初始化某些对象? 例如,为什么NSDate *today = [NSDate date];合法?

4 个答案:

答案 0 :(得分:4)

它们在date方法中初始化。这是在Objective-C中创建自动释放对象的常用方法。该形式的分配器称为便利分配器。

要了解更多相关信息,请阅读Apple关于对象创建的Cocoa Core Competencies文档中的“工厂方法”段落:http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/ObjectCreation.html

要为您自己的类创建便利分配器,请实现一个以您的类命名的类方法(不带前缀)。例如:

@implementation MYThing
...

+ (id)thing
{
  return [[[MYThing alloc] init] autorelease];
}

...
@end

答案 1 :(得分:1)

静态日期调用中

today 已初始化(并自动释放)。

答案 2 :(得分:0)

您只需要通过调用init…为已分配的对象调用alloc方法。 alloc仅保留对象所需的空间,从而创建单元化对象。

未初始化的对象将所有实例变量设置为零,零或等效类型。除了设置为1的保留计数。

返回对象的所有其他方法都保证返回完全初始化的对象。 alloc是个例外。

绝不能在已初始化的对象上调用init…方法。对拇指的简单规则是使用alloc - init…之间的一对一关系,就是这样。

答案 3 :(得分:0)

两部分。

首先,正如其他人所提到的,方法可以在返回之前初始化然后自动释放对象。那是部分这里发生的事情。

另一部分是如何定义的。请注意大多数Objective C定义如何以-开头?你提到的那个没有。签名如下所示:

+ (NSDate*) date;

也就是说,它是一个方法,并且作为一个整体而不是该类的实例应用于该类。