2010-03-22 69 views
0

我在Objective-C中的內存管理有問題。假設我有一個方法分配一個對象並將該對象的引用存儲爲該類的成員。如果我第二次運行相同的函數,我需要在創建一個新對象來替換它之前釋放這個第一個對象。假設函數的第一行是:如何釋放在不同的AutoReleasePool中分配的對象?

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

這意味着將會有一個不同的自動發佈池。分配對象的代碼如下:

if (m_object != nil) 
    [m_object release]; 

m_object = [[MyClass alloc] init]; 
[m_object retain]; 

的問題是程序運行方法的最後一行時崩潰:

[pool release]; 

我在做什麼錯?我怎樣才能解決這個問題 ?

問候
艾倫

回答

0

自動釋放池處理已明確自動釋放對象

例子:

[object autorelease]; 

你必須有至少一個NSAutoreleasePool在你的程序的情況下,一些代碼嘗試自動釋放對象。如果這是您唯一的NSAutoreleasePool,那麼釋放池可能會導致您的問題。

2

首先得到目標c內存管理的一般理解。你在這裏混淆了很多不同的東西。例如,您不必保留m_object,因爲alloc已經將保留計數設置爲1.另外通常在釋放對象時不釋放AutoReleasePool。就像我說的那樣查看內存管理的文檔(實際上很不錯)。