copyWithZone返回值所有权并保留计数

时间:2011-01-08 11:06:20

标签: iphone autorelease retaincount copywithzone

我在关于copyWithZone的苹果文档中读到了:

“返回的对象隐式由发件人保留,负责释放它。”

所以,如果我写这个:

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

        return obj;
    }

我打来电话:

MyStuff* obj = [varobj copy];

会保留obj吗?如果我没有设置自动释放,保留计数怎么样?

1 个答案:

答案 0 :(得分:3)

请勿在{{1​​}}方法中自动发布,否则您将不会拥有它(并且可能无法对其进行任何操作)。

删除自动发布,copyWithZone将在obj复制中正确保留。完成后,您只需要MyStuff

Apple的一句话是说发件人 - 这是你的release初始化 - 拥有所有权并需要释放它。 “发件人”是指发送 MyStuff *obj邮件的对象,而不是copy方法。