allocWithZone返回的对象是否需要释放?即是否与alloc和new相同?allocWithZone对象需要释放
- (id) copyWithZone: (NSZone *) zone
{
Engine *engineCopy;
engineCopy = [[[self class] allocWithZone:zone]init];
return (engineCopy);
}
allocWithZone返回的对象是否需要释放?即是否与alloc和new相同?allocWithZone对象需要释放
- (id) copyWithZone: (NSZone *) zone
{
Engine *engineCopy;
engineCopy = [[[self class] allocWithZone:zone]init];
return (engineCopy);
}
是的,你仍然需要释放它。查看文档NSObject的: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
如果您正在使用管理存储器(未 垃圾收集),这种方法 保留返回 之前的对象。返回的对象的保留 计数为1,不是自动发布的。 此方法的调用者是 负责释放返回的 对象,使用release或 autorelease。
new
结合了alloc
和init
。这是需要释放的alloc
;几乎不应该直接调用allocWithZone:
(alloc
在内部调用它),并且主要是出于传统原因。 更新同样,copyWithZone:
应该(几乎)不会直接调用;但是,copy
会隐式调用它。 copyWithZone:
里面可能是我唯一称作allocWithZone:
的地方。
但在教科书中,我在阅读他们说以下方法在内存方面很好 - 请参阅编辑 – TheLearner 2011-05-09 14:21:29
请参阅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
k so教科书是拧的 – TheLearner 2011-05-09 15:43:01