关于过度释放。假设我在Test.h中定义了一个实例变量
NSString *mystring;
在我的实现Test.m中,我没有在任何地方初始化变量mystring。但我在dealloc中发布它:
-(void)dealloc {
[mystring release];
}
这现在过度发布吗?我一直在dealloc做以下事情,以避免任何问题,但是,这真的有必要吗?
-(void)dealloc {
if (mystring) [mystring release];
}
似乎[nil release]不应该做任何事情,有人可以与班级成员核实这一点吗?
答案 0 :(得分:5)
没有办法过度释放一开始就不存在的东西。
实例变量初始化为nil,因此[mystring release]
是消息nil,在Objective-C中就好了。
你的-dealloc方法确实需要在最后调用[super dealloc]
。
答案 1 :(得分:0)
首先,为什么要在类级别创建一个你没有在任何地方初始化的变量?
由于这篇文章被标记为iphone并且在iphone环境中管理你的内存非常重要,所以即使你没有分配它,如果你已经定义了它也是一个好主意。
您可以毫无问题地对未初始化的变量调用release,并确保[super dealloc]