[[NSDate date] retain]和[[NSDate alloc] init]之间的区别

vir*_*ral 3 iphone cocoa objective-c ios

由于以下两个用途相同,

today = [[NSDate date] retain];    
Run Code Online (Sandbox Code Playgroud)

today = [[NSDate alloc] init]; 
Run Code Online (Sandbox Code Playgroud)

那么它们之间的区别是什么?
这里有什么与内存分配方法有关或其他东西是相应使用它们的原因.

Emp*_*ack 6

[NSDate date]是一个方便的构造函数,您可以使用它来释放对象自动释放池的头痛.向retain便捷构造函数发送消息[[NSDate date] retain]会使您成为对象的所有者,并且您有责任正确地释放它.

[[NSDate alloc] init]是您成为对象所有者的默认初始值设定项,几乎等于 [[NSDate date] retain].


kpe*_*yua 5

除了前者不必要地将对象放入自动释放池之外,基本上没有区别.

如果我想在创建对象后保留该对象,并且-init该类的样式方法可用,我几乎总是选择方便构造函数加上-retain.


Joh*_*ker 5

两者之间实际上没有区别.在第一个例子中,你只是保留了一个由方便方法创建的自动释放的实例,它可以做类似的事情return [[[NSDate alloc] init] autorelease].