2010-06-22 58 views
0

我一直在努力從靜態方法返回數組的最佳模式。返回一個NSArray沒有泄漏?

在我的靜態方法getList(在BIUtility類中),我分配一個NSArray返回。在返回行,我做的:

return [array autorelease]; 
在調用方法

然後,我分配一個這樣的數組:

NSArray * list = [[[NSArray alloc] initWithArray:[BIUtility getList]] retain]; 

後來我釋放使用名單:

[list release]; 

我認爲這會導致內存泄漏,因爲保留增加了太多的保留數。但是,如果我不保留,我會得到一個Bad_Exec,因爲它已經釋放了這個類。

我覺得我正在過度這個,並且必須有一個典型的模式。我一直在尋找所有的地方,我找不到「最佳做法」。

我感謝您的幫助。

回答

1

,就應該替換:

NSArray * list = [[[NSArray alloc] initWithArray:[BIUtility getList]] retain]; 

有了:

NSArray * list = [[BIUtility getList] retain]; 

這是因爲getList實際上返回一個指針NSArray

但是,如果它是一個可變數組,則應該說[[BIUtility getList] copy];,以便您不會意外改變另一個對象具有引用的數組。

如果你很好奇,你會得到一個內存泄漏,因爲你的原始語句會增加兩個計數器,而你以後只會釋放一個。

聲明計數增加這些部位:

[anObject]] retain] 
[anClassname alloc] 

[anObject copy]也將創建的1

+0

我做這個計數的對象,但後來我得到的消息EXC_Bad_Instruction因爲它正試圖在已經發布的對象上進行發佈。我不需要對保留的對象進行顯式發佈嗎? – 2010-06-22 00:48:40

+0

@Michael:你最初怎麼聲明數組? – 2010-06-22 00:58:07

+0

像這樣... NSArray * moveList = [[NSArray alloc] init]; 有時我必須使用NSMutableArray,因爲我從SQL查詢構建它,但是我返回一個NS數組。 – 2010-06-22 01:20:42