Objective c @综合内存管理器

Objective c @综合内存管理器,objective-c,Objective C,假设我有一位成员: @property (retain, nonatomic) Student *student; @synthesize student; 现在让我们假设在另一个类中,我正在设置student,这意味着我正在为student分配一些新创建的对象。现在假设student之前已经引用了一个对象,那么我的问题是,当我将新对象ref分配给student时,这个对象会被释放吗?在此代码中 someClassObjectRef.student = newStudent; //someCl

假设我有一位成员:

@property (retain, nonatomic) Student *student;
@synthesize student;
现在让我们假设在另一个类中,我正在设置student,这意味着我正在为student分配一些新创建的对象。现在假设student之前已经引用了一个对象,那么我的问题是,当我将新对象ref分配给student时,这个对象会被释放吗?在此代码中

someClassObjectRef.student = newStudent; //someClassObjectRef.student is already having one student object ref
所以我必须在分配新对象之前显式释放旧对象,还是@synthesis在后面这么做?我希望你能理解我想说的话

注:不使用弧


谢谢。

在保留新对象之前,合成设置器将
释放先前保留的对象;比如:

- (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];
}

我希望您希望在
-(void)dealloc
或`-(void)viewDidUnload上进行内存管理

- (void)dealloc {
   [student release]; or  [self setStudent:nil];
    [super dealloc];
 }
这些是内存管理的最佳实践,或者您可以在使用时创建对象,并在使用后释放

Student *student = [[Student alloc]init];
// Do Some Work over here
[student release];

我已回答,您可以检查并相应地回答。我也提出了你的问题:)所以合成器方法释放了它,我不需要那么麻烦,对吧?@bloodwing-no-一切都搞定了。