objective-c以dealloc方法释放未初始化的类成员

时间:2010-05-23 03:49:56

标签: iphone objective-c cocoa-touch

关于过度释放。假设我在Test.h中定义了一个实例变量

NSString *mystring;

在我的实现Test.m中,我没有在任何地方初始化变量mystring。但我在dealloc中发布它:

-(void)dealloc {
    [mystring release];
}

这现在过度发布吗?我一直在dealloc做以下事情,以避免任何问题,但是,这真的有必要吗?

-(void)dealloc {
     if (mystring) [mystring release];
}

似乎[nil release]不应该做任何事情,有人可以与班级成员核实这一点吗?

2 个答案:

答案 0 :(得分:5)

没有办法过度释放一开始就不存在的东西。

实例变量初始化为nil,因此[mystring release]是消息nil,在Objective-C中就好了。

你的-dealloc方法确实需要在最后调用[super dealloc]

答案 1 :(得分:0)

首先,为什么要在类级别创建一个你没有在任何地方初始化的变量?

由于这篇文章被标记为iphone并且在iphone环境中管理你的内存非常重要,所以即使你没有分配它,如果你已经定义了它也是一个好主意。

您可以毫无问题地对未初始化的变量调用release,并确保[super dealloc]