为什么在使用objective-c之前不需要初始化某些对象?
例如,为什么NSDate *today = [NSDate date];
合法?
答案 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;
也就是说,它是一个类方法,并且作为一个整体而不是该类的实例应用于该类。