在我的应用程序中,我有一个我在本地声明的NSError:
NSError *error;
我是以dealloc方法发布它还是需要在我声明的方法中释放它?
答案 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
/ copy
或retain
创建的。 (如果你只是在没有分配或保留的情况下从其他地方获得它,那么它不属于你,你根本不应该发布。)
否则,一旦它超出本地范围,您就无法访问指针,对象将泄漏。
答案 2 :(得分:-1)
您需要在本地发布它。因为在dealloc方法中,我们释放类变量或类数据成员以及在实现文件中使用的那些变量(如外部变量)。