iPhone:copyWithZone:在对象返回之前释放对象?

iPhone:copyWithZone:在对象返回之前释放对象?,iphone,release,return,retain,copywithzone,Iphone,Release,Return,Retain,Copywithzone,我在苹果的文档中读到了关于copyWithZone的内容:“返回的对象由负责发布它的发送者隐式保留”。 但是我怎样才能释放我返回的东西。。。我快疯了 代码示例: - (id)copyWithZone:(NSZone *)zone { MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain [obj fillTheObj]; return ob

我在苹果的文档中读到了关于copyWithZone的内容:“返回的对象由负责发布它的发送者隐式保留”。 但是我怎样才能释放我返回的东西。。。我快疯了

代码示例:

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

        return obj; // implicit retain
    }
应该在哪里发布? 我保留两次?嗯…

发送方负责发布。这意味着调用您的复制方法的人将获得所有权,即:

MyObject *obj = ...
MyObject *aCopy = [obj copy];
... do stuff with aCopy
[aCopy release];

Okkkk,调用的发送方,而不是对象的发送方。那就更清楚了。但我真的快疯了。所以我可以传递myObject.var=[localvar copy],其中myObject中的属性定义为retain,并在dealloc中发布。那很好,不是吗?@Oliver——如果你那样做的话,你会留得太多的。如果
var
属性声明为
retain
,则正确的赋值将是
myObject.var=[[localvar copy]autorelease]
。但听起来您真正想要的是将属性声明为
copy
,然后只需执行
myObject.var=localvar