复制对象值

时间:2012-01-12 13:21:10

标签: objective-c copy

我有一个方法接收一个数组,然后将其存储在NSObject属性中。

- (void)updatePoints:(NSArray *)pointArrayPassed
{
    pointArray = pointArrayPassed;
    pointCount= pointArray.count;
}

以下代码有效,但显然保持pointArrayPassed的指针,所以当我可以它反映调用堆栈。但是,如果我使用pointArrayPassed的副本,则应用程序开始大量泄漏!

函数中是否有一种方法只传递值而不是指针?

1 个答案:

答案 0 :(得分:2)

在不释放当前对象的情况下,您不能仅仅在iVar中保留副本。否则你丢失了可以发送release消息的指针 - 这就是为什么它会在整个地方泄漏。

这是一个更好的替代品。

- (void)updatePoints:(NSArray *)pointArrayPassed
{
    if (pointArray == pointArrayPassed) {
        //the new array is the same as the current one. Do nothing
        return;
    }
    [pointArray release];
    pointArray = [pointArrayPassed copy];
    pointCount = pointArray.count;

}

这不是最优雅的做法。

更好的方法是将pointArray声明为具有copy作为其内存管理语义的属性(这很明显,因为您有一个可变/不可变类集群)。并且有一个名为-pointCount的单独方法,它在需要时返回计数。