2011-12-18 55 views
0

你好,我想知道如果有人可以給我一些關於內存管理的建議。這應該是autoreleased?還是有辦法手動做到這一點?

我有以下幾點:

-(NSMutableArray*)addAllObjectesInbetween:(NSMutableArray*)betweenTheTwo{ 

    NSMutableArray* toReturn = [betweenTheTwo mutableCopy]; 
    [toReturn insertObject:@"oneObject" atIndex:1]; 

    return toReturn; 
} 

現在我知道,因爲我想提出一個mutableCopy,我必須釋放toReturn,但我不知道該怎麼做,因爲它正在恢復到不同的功能。我不想釋放它是因爲它被髮送,但如果我嘗試釋放它後,它只是不會被調用。所以我想在mutableCopy上加autorelease,但我不確定這是否是最好的做法......有人可以幫我一把嗎?謝謝!

回答

2

是的,這是最好的做法。您還可以添加它,而返回:

return [toReturn autorelease]; 

這是因爲按照慣例,如果你的方法不init開始或(含)copy它必須返回一個自動釋放的對象。如果您想要返回+1對象,請更改您的方法名稱以保持一致。

+0

看來,如果我添加'[toReturn autorelease];'它打破了......我想我需要做更多的調查。有什麼想法嗎? – 2011-12-18 20:14:22

+2

@JamesDunay:那麼別的東西是錯的。你應該像sidyll推薦的那樣調用autorelease。嘗試在您的應用上運行「產品 - >分析」,看看它是否會爲您提供周圍代碼中的任何內存問題。 – 2011-12-19 00:16:44

1

您應該自動釋放toReturn,或者重命名功能與copy啓動,像copyAllObjectsInBetween:,或mutableCopy,像mutableCopyAllObjectsInBetween:

+0

但即使如此,我仍然有一個泄漏,當我創建toReturn時,我該如何處理它。另請參閱上面的評論,因爲我試圖autorelease它沒有運氣,謝謝! – 2011-12-18 20:32:41

+0

也許我知道了,我試着保留返回的數組以及autorelease,並且現在它似乎工作,我只是要檢查泄漏! – 2011-12-18 20:37:06

+0

@JamesDunay:你在隱藏另一個bug。保留+ autorelease沒有必要,只是泄漏對象,這就是爲什麼你沒有任何其他問題。 – 2011-12-19 00:18:02

相關問題