gpt4 book ai didi

objective-c - @synthesize 内存管理

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:20 25 4
gpt4 key购买 nike

假设我有这个成员:

@property (retain, nonatomic) Student *student;
@synthesize student;

现在假设在其他类(class)中,我正在设置学生,这意味着我正在将一些新创建的对象分配给学生。现在假设 student 之前已经引用了一个对象,那么我的问题是当我将新对象 ref 分配给 student 时这个对象是否被释放?在这段代码中

someClassObjectRef.student = newStudent; //someClassObjectRef.student is already having one student object ref

那么我是否必须在分配新对象之前显式释放旧对象,或者 @synthesize 在后面这样做?我希望你明白我想说什么。

注意:没有使用ARC。

谢谢。

最佳答案

合成 setter 将在保留新对象之前释放任何先前保留的对象;像这样的东西:

- (void)setStudent:(Student *)student
{
[student retain];
[_student release];
_student = student;
}

请注意,它保留传入的对象之前释放旧对象;这允许您将相同的对象传递给它本身而无需释放它。

还有其他方法可以做到这一点,例如:

- (void)setStudent:(Student *)student
{
if (student != _student)
{
[_student release];
_student = [student retain];
}
}

释放学生对象的正确方法是在您的dealloc 方法中设置nil:

- (void)dealloc
{
[self setStudent:nil]; // or self.student = nil;
[super dealloc];
}

关于objective-c - @synthesize 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11684665/

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