1

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

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

所以如果我写这个:

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

        return obj;
    }

我打电话给:

MyStuff* obj = [varobj copy];

obj保留吗?如果我不设置自动释放,保留计数怎么办?

4

1 回答 1

3

不要在您的copyWithZone方法中自动释放它,否则您将不拥有它(甚至可能无法对它做任何事情)。

删除自动释放并将obj适当地保留在MyStuff复制中。release当你完成它时,你只需要它。

苹果的句子是说发送者——也就是你的MyStuff *obj初始化——拥有所有权并且需要释放它。“发件人”是指发送消息的对象,而copy不是您的copyWithZone方法。

于 2011-01-08T11:11:06.947 回答