allocWithZone对象需要释放

时间:2011-05-09 14:02:36

标签: objective-c

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

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

return (engineCopy);
}

2 个答案:

答案 0 :(得分:1)

是的,你还需要发布它。请参阅NSObject的文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

  

如果您使用的是托管内存(不是   垃圾收集),这种方法   在返回之前保留对象   它。返回的对象具有保留   计数为1并且未自动释放。   这种方法的调用者是   负责释放退回的   对象,使用发布或   自动释放。

答案 1 :(得分:1)

new结合了allocinit。这是需要释放的alloc;几乎永远不会直接调用allocWithZone:alloc在内部调用它),并且主要是由于遗留原因。 类似地,更新copyWithZone:应该(几乎)永远不会被直接调用;但是,copy会隐式调用它。内部copyWithZone:可能是我曾经呼叫allocWithZone:的唯一地方。