分析显示copywithzone正在泄漏,这是误报吗?

时间:2011-06-01 14:25:47

标签: iphone objective-c cocoa-touch

在我的应用程序中,我想将自定义类从一个数组复制到另一个数组。所以我为这个类实现了copyWithZone。 Xcode分析警告我,[alloc]或[copy]的每一行都在泄漏内存。我如何判断它是否真的泄漏,或者它是我需要的复制实例?

@implementation MyClass

- (id)copyWithZone:(NSZone *)zone {

    MyClass *copy = [[MyClass allocWithZone:zone] init];
    if (copy){
        copy.uniqueId = [uniqueId copy];
    }

    return copy; 
}

2 个答案:

答案 0 :(得分:3)

您的uniqueId属性是否被声明为保留属性?如果是这样,这条线正在泄漏:

copy.uniqueId = [uniqueId copy];

将其更改为:

copy.uniqueId = [[uniqueId copy] autorelease];

答案 1 :(得分:2)

这不太对。

该行

copy.uniqueId = [uniqueId copy];

应该是

copy.uniqueId = self.uniqueId;

这样你就可以获得属性的正确语义,无论它是否被声明为copy,retain或assign。

另外,我不打扰copy != nil的测试。将setUniqueId:发送到nil是无操作。

修改

顺便说一下

copy.uniqueId = [uniqueId copy];
如果属性是保留或复制,则

泄漏,因为[uniqueId copy]为您提供了一个对象,并且在范围结束之前不会释放或自动释放它。