在我的应用程序中,我想将自定义类从一个数组复制到另一个数组。所以我为这个类实现了copyWithZone。 Xcode分析警告我,[alloc]或[copy]的每一行都在泄漏内存。我如何判断它是否真的泄漏,或者它是我需要的复制实例?
@implementation MyClass
- (id)copyWithZone:(NSZone *)zone {
MyClass *copy = [[MyClass allocWithZone:zone] init];
if (copy){
copy.uniqueId = [uniqueId copy];
}
return copy;
}
答案 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]
为您提供了一个对象,并且在范围结束之前不会释放或自动释放它。