- (id)copyWithZone:(NSZone *)zone - 内存泄漏

时间:2011-02-27 12:33:49

标签: objective-c ios memory-management copy

我的应用程序中有一些内存泄漏,我认为它们追溯到我的'(id)copyWithZone:(NSZone *)我的'Project'类的区域方法。此副本的目的是创建深层副本,因为需要更改值而不影响原始值。这个类有一个自定义的init方法:

- (id)initWithProjectID:(NSInteger)aProjectID name:(NSString *)aProjectName private:(BOOL)isPrivateProject userProjectOrderTieID:(NSInteger)aUserProjectOrderTieID orderID:(NSInteger)anOrderID {
self = [super init];
if (self) {
    projectID = aProjectID;
    projectName = [[NSString alloc] initWithString:aProjectName];
    isPrivate = isPrivateProject;
    userProjectOrderTieID = aUserProjectOrderTieID;
    orderID = anOrderID;
}
return self;
}

和复制方法:

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

Project *copy = [[[self class] allocWithZone:zone]
                 initWithProjectID:projectID
                 name:projectName
                 private:isPrivate
                 userProjectOrderTieID:userProjectOrderTieID 
                 orderID:orderID];

return copy;

}

并且为了完整性dealloc方法:

- (void)dealloc {
[projectName release];
[super dealloc];
}

除了projectName之外,所有ivars都是NSIntegers是一个NSString。任何人都可以看到此代码有任何问题吗?

1 个答案:

答案 0 :(得分:1)

在你发布的内容中,没有什么是错误的。我怀疑泄漏是在其他地方。您确定正在发布的复制的Project对象是否正确发布?请记住,-copyWithZone:会返回已保留的对象。

泄漏工具可能会将-copyWithZone:中的行识别为发生内存泄漏的有问题的行,因为......好吧,但这并不意味着它是您需要修复的地方。