释放方法变量

时间:2011-03-05 03:02:39

标签: iphone objective-c

请参阅此代码:

 -(id)MethodName:arg {
    // some stuff
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // some more stuff
    [dateFormatter release];
}

dateFormatter是一个方法变量(即不是实例变量;它没有在头文件中定义)。然而,该方法是创建指针和分配内存。事实证明,如果我按照最后一行释放变量,程序会崩溃,但如果没有,则可以正常工作。我不明白为什么如果我创建一个指针并分配内存,那么不需要使用release。除此之外,我应该在使用后将dateFormatter设置为nil吗?

1 个答案:

答案 0 :(得分:1)

可能发生的事情是你将dateFormatter传递给只有assigns的某个实例变量的其他方法。然后你释放它,有效地解除分配它。最后,现在引用了释放内存的类尝试使用实例变量,程序崩溃。

你应该做的是在收到变量时接收类retain(以及releasedealloc方法中指向它的实例变量。

如果要将其分配给属性,则应使用retain修饰符定义它,例如:

@property (nonatomic, retain) NSDateFormatter* dateFormatter;