我的应用程序中有一些内存泄漏,我认为它们追溯到我的'(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。任何人都可以看到此代码有任何问题吗?
答案 0 :(得分:1)
在你发布的内容中,没有什么是错误的。我怀疑泄漏是在其他地方。您确定正在发布的复制的Project对象是否正确发布?请记住,-copyWithZone:
会返回已保留的对象。
泄漏工具可能会将-copyWithZone:
中的行识别为发生内存泄漏的有问题的行,因为......好吧,但这并不意味着它是您需要修复的地方。