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-一切都搞定了。