我是否需要发布局部变量?

时间:2011-10-11 07:32:06

标签: iphone objective-c memory-management

在我的应用程序中,我有一个我在本地声明的NSError:

NSError *error;

我是以dealloc方法发布它还是需要在我声明的方法中释放它?

3 个答案:

答案 0 :(得分:3)

请阅读Cocoa Memory Management Guide,内存管理是您应该完全理解的。 (而且并不难。)如果你在一个方法中声明一个变量,你在dealloc中没有指向它的指针,因此你无法在那里释放它 - 你只能在它出去之前释放它范围。另一个问题是你是否应该释放它。这取决于它是基于堆栈,自动释放还是保留变量:

float foo[] = {1, 2, 3}; // stack-based, no releasing necessary
NSString *foo = [NSString stringWithFormat:…]; // autoreleased, you must not release it
NSString *foo = [[NSString alloc] initWith…]; // retained, you must release it

答案 1 :(得分:2)

您需要在本地release - 假设您是通过alloc / new / copyretain创建的。 (如果你只是在没有分配或保留的情况下从其他地方获得它,那么它不属于你,你根本不应该发布。)

否则,一旦它超出本地范围,您就无法访问指针,对象将泄漏。

答案 2 :(得分:-1)

您需要在本地发布它。因为在dealloc方法中,我们释放类变量或类数据成员以及在实现文件中使用的那些变量(如外部变量)。