请参阅此代码:
-(id)MethodName:arg {
// some stuff
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// some more stuff
[dateFormatter release];
}
dateFormatter是一个方法变量(即不是实例变量;它没有在头文件中定义)。然而,该方法是创建指针和分配内存。事实证明,如果我按照最后一行释放变量,程序会崩溃,但如果没有,则可以正常工作。我不明白为什么如果我创建一个指针并分配内存,那么不需要使用release。除此之外,我应该在使用后将dateFormatter设置为nil吗?
答案 0 :(得分:1)
可能发生的事情是你将dateFormatter
传递给只有assigns
的某个实例变量的其他方法。然后你释放它,有效地解除分配它。最后,现在引用了释放内存的类尝试使用实例变量,程序崩溃。
你应该做的是在收到变量时接收类retain
(以及release
在dealloc
方法中指向它的实例变量。
如果要将其分配给属性,则应使用retain
修饰符定义它,例如:
@property (nonatomic, retain) NSDateFormatter* dateFormatter;