allocWithZone返回的对象是否需要释放?即它与alloc和new相同吗?
- (id) copyWithZone: (NSZone *) zone
{
Engine *engineCopy;
engineCopy = [[[self class] allocWithZone:zone]init];
return (engineCopy);
}
答案 0 :(得分:1)
是的,你还需要发布它。请参阅NSObject的文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
如果您使用的是托管内存(不是 垃圾收集),这种方法 在返回之前保留对象 它。返回的对象具有保留 计数为1并且未自动释放。 这种方法的调用者是 负责释放退回的 对象,使用发布或 自动释放。
答案 1 :(得分:1)
new
结合了alloc
和init
。这是需要释放的alloc
;几乎永远不会直接调用allocWithZone:
(alloc
在内部调用它),并且主要是由于遗留原因。
类似地,更新,copyWithZone:
应该(几乎)永远不会被直接调用;但是,copy
会隐式调用它。内部copyWithZone:
可能是我曾经呼叫allocWithZone:
的唯一地方。