gpt4 book ai didi

objective-c - - (id)copyWithZone :(NSZone *)zone - memory leaks

转载 作者:行者123 更新时间:2023-11-29 13:50:12 29 4
gpt4 key购买 nike

我的应用程序中有一些内存泄漏,我认为它们可以追溯到我的“项目”类的 - (id)copyWithZone:(NSZone *)zone 方法。此副本的目的是创建深拷贝,因为需要在不影响原始值的情况下更改值。这个类有一个自定义的初始化方法:

- (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 是一个 NSString 之外,所有的 ivar 都是 NSIntegers。任何人都可以看到此代码有任何问题吗?

最佳答案

您发布的内容没有明显错误。我怀疑泄漏是在其他地方。您确定返回的复制的 Project 对象已正确释放吗?请记住,-copyWithZone: 返回一个已被保留的对象。

泄漏工具可能会将 -copyWithZone: 中的行识别为内存泄漏起源的违规行,因为......它是,但这并不意味着它是你需要的地方修复。

关于objective-c - - (id)copyWithZone :(NSZone *)zone - memory leaks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133227/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com