2010-06-24 12 views
1

什麼是正確的方法來做到這一點?iphone - 不漏水

我有一個數組,我會用幾種方法。我將對象添加到它,得到的值,替換值等

今天我這樣做:

我宣佈它的.h,一旦使用像

NSMutableArray *myArray; 

東西作爲應用程序開始,我宣佈它的.m做這樣

myArray = [[[NSArray alloc] init] retain]; 

東西如果我不加保留的陣列會在某個時候被釋放,應用程序將崩潰。但在應用程序開始時分配數組並將其「打開」而不釋放它會使儀器哭泣,將手指指向我,稱我爲「泄漏」...

如何解決這個問題?這是正確的方法嗎?你們如何做這樣的事情?

感謝

回答

3

alloc隱式設置保留計數爲1。通過發送retain消息你遞增保留計數爲2。爲了使對象被釋放,那麼你就需要釋放兩次。不這樣做會導致內存泄漏。

理想情況下,你應該使用[[NSArray alloc] init]創建您的init方法的對象,然後釋放它在你的dealloc方法,像這樣:

- (void)dealloc { 
    [myArray release]; 
    [super dealloc]; 
} 

您也可能會發現這篇文章有用:http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

一件事:您將myArray聲明爲NSMutableArray,但將其實例化爲NSArray。也許這是導致崩潰的原因。

+0

謝謝,但告訴我:我是否犯了一個異端,在應用程序的開始處聲明數組並在dealloc方法上釋放它?我怎樣才能不使用保留?如果我不這個數組將會失效,應用程序將崩潰。我試圖刪除保留,但應用程序崩潰。 – SpaceDog 2010-06-24 01:43:20

+1

您必須將其發佈到代碼中的其他位置。確保代碼中'[myArray release]'的唯一實例在你的'dealloc'方法中。 – robinjam 2010-06-24 01:47:56

2

您不應該保留剛剛創建的對象。你已經擁有它。如果像你說的那樣,「數組將在某個時刻發佈並且應用程序將崩潰」,那就是你應該改變的代碼。你的代碼不應該釋放你仍然想要保留的對象。

+0

謝謝!!!!!!!!!!! – SpaceDog 2010-06-24 03:32:00