2011-05-09 85 views
1

allocWithZone返回的对象是否需要释放?即是否与alloc和new相同?allocWithZone对象需要释放

- (id) copyWithZone: (NSZone *) zone 
{ 
Engine *engineCopy; 
engineCopy = [[[self class] allocWithZone:zone]init]; 

return (engineCopy); 
} 

回答

1

是的,你仍然需要释放它。查看文档NSObject的: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

如果您正在使用管理存储器(未 垃圾收集),这种方法 保留返回 之前的对象。返回的对象的保留 计数为1,不是自动发布的。 此方法的调用者是 负责释放返回的 对象,使用release或 autorelease。

+0

但在教科书中,我在阅读他们说以下方法在内存方面很好 - 请参阅编辑 – TheLearner 2011-05-09 14:21:29

+0

请参阅NSCopying的文档,http://developer.apple.com/library/mac/#documentation/Cocoa/ Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html#// apple_ref/occ/intf/NSCopying,但基本上调用copyWithZone假定与alloc类似,即它返回保留计数为1的对象。 – 2011-05-09 14:37:27

+0

k so教科书是拧的 – TheLearner 2011-05-09 15:43:01

1

new结合了allocinit。这是需要释放的alloc;几乎不应该直接调用allocWithZone:alloc在内部调用它),并且主要是出于传统原因。 更新同样,copyWithZone:应该(几乎)不会直接调用;但是,copy会隐式调用它。 copyWithZone:里面可能是我唯一称作allocWithZone:的地方。