2011-10-11 66 views

回答

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 
+0

谢谢 - 这就是我需要的答案 – sregorcinimod

2

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

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

+0

感谢您的快速回复 – sregorcinimod

-1

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

+0

这不是一个好方法。你只需要在本地释放对象,如果你拥有它,通常不会出现'NSError'。 – zoul

+0

但是你不能在dealloc方法中释放它,因为它不能在那里访问。最好用本地方法释放它。由于出现错误时使用NSError。所以这完全取决于情况。 –

+1

问题有两个部分:在哪里发布和*如果要发布*。你说要在本地发布(这很好),但剩下的一点是你几乎从不需要释放'NSError'值,因为它们是自动发布的。 – zoul

相关问题