2011-10-11 111 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

相關問題