我应该在这个方法中释放对象吗?

时间:2010-08-31 01:08:58

标签: objective-c memory-management

以下是代码:

- (id)copyWithZone:(NSZone*)zone {
    ExecutedOrderInfo* copy = [[self class] allocWithZone:zone];
    copy.executedPrice = self.executedPrice;
    copy.executedQuantity = self.executedQuantity;
    return (id)copy;
}

问题是,是否有必要在上面的代码中发布“复制”?或者在有人打电话时发布它?

3 个答案:

答案 0 :(得分:3)

不,不是这种方法。以copy开头的方法必须返回具有保留计数1的非自动发布的对象。就像您一样。

PS:不需要return (id)copy中的演员表。 id是抽象对象类型,比您的具体类更通用。只有在具有应该被视为不同类的具体类时才需要强制转换 - 就像在进行子类检查之后的子类一样。

PPS:您的方法缺少init。仅仅alloc一个实例并不好。而是做这样的事情:[[[self class] allocWithZone:zone] init];

答案 1 :(得分:0)

Max是对的。 但所有的设计和打算都取决于你。 (即使通常copyXXX意味着返回非自动释放的对象)

为了防止内存泄漏,请在使用后使用静力分析和仪器。

答案 2 :(得分:-1)

如果我正确地读取您的代码 - 否。该方法不会创建对象,因此不需要释放它。