2011-01-08 71 views
0

我在苹果文档中阅读了有关copyWithZone的内容:“返回的对象由发件人隐式保留,负责释放它”。 但是...我怎么能释放我回来的东西......我要疯了!iPhone:copyWithZone:在返回之前释放一个对象?

示例代码:

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

     return obj; // implicit retain 
    } 

凡应该是告诉释放? 我保留两次?呃...

回答

1

发件人负责发布。这意味着谁打电话给你的复制方法取得所有权,即:

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

Okkkk,呼叫的发件人,而不是对象的发件人。这更清楚。但我真的很疯狂。所以...我可以通过myObject.var = [localvar copy]将myObject中的属性定义为retain,并在dealloc中发布。那会很好,不是吗? – Oliver 2011-01-08 01:42:39

相关问题