2011-01-08 43 views
1

我的苹果文档阅读copyWithZone:copyWithZone返回值所有权和保留计数

“返回的对象是隐含由发送者,谁是负责释放它保留”。

所以,如果我这样写:

- (id)copyWithZone:(NSZone *)zone { 
     MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease]; 
     [obj fillTheObj]; 

     return obj; 
    } 

我打电话:

MyStuff* obj = [varobj copy]; 

obj被保留?如果我没有设置autorelease,那么保留计数如何?

回答

3

请勿在copyWithZone方法中自动释放它,否则您将不拥有它(甚至可能无法使用它)。

删除autorelease和obj将被适当保留在MyStuff复制中。当你完成它时,你只需要release

苹果公司的一句话是说发件人 - 你的MyStuff *obj初始化 - 拥有所有权并需要发布它。 “发件人”是指发送的copy消息的对象,而不是您的copyWithZone方法。

+0

@Matthew Frederick:好的,所以没有像苹果文档说的那样保留IMPLICIT。由于你的代码,这是明确的吗? – Oliver 2011-01-08 11:14:11