0
我正在優化我的應用程序並確保內存管理得到正確實施。因爲我發現didUnload/dealloc/willAppear對於實現內存清理並不可靠,所以我決定實現我自己的方法,這樣我就可以完全控制這個內存管理。在頭文件即使我明確釋放內存,內存也不會釋放
@property (retain) NSMutableArray *selectedCardIDs;
@property (retain) NSMutableArray *selectedRowArray;
@property (retain) NSMutableArray *cardArray;
@property (retain) NSMutableArray *cardIDArray;
這裏釋放方法我陣列
定義:
- (void) willReleaseObjects {
[self.aCopyOfCardIDArray release];
[self.listOfItems release];
[self.aCopyListOfItems release];
[self.selectedCardIDs release];
[self.selectedRowArray release];
[self.cardArray release];
[self.cardIDArray release];
}
該陣列可以得到非常大(> 1000多個條目中的每個) ,爲什麼在卸載視圖後這些數組的發佈是必不可少的。我明確地調用這個函數在IBAction爲方法,如:
- (IBAction) stopDictionary:(UIBarButtonItem *) sender {
[self closeDatabase];
[self willReleaseObjects];
[self dismissModalViewControllerAnimated:YES];
}
我調試的代碼,它實際上是執行每一個版本,但是當我診斷與儀器的內存分配,它似乎釋放只有部分內存,實際上幾乎沒有什麼爲什麼每次我再次加載這個視圖時,內存消耗當然在增加,這根本不好。 任何想法,爲什麼我的記憶不在這裏發佈?謝謝。
感謝聖誕老人,我試過了,同樣的結果。我在我的問題中添加了屬性定義,並且如您所見,我保留所有這些屬性。據我所知,所有分配的對象應該使用release來發布。至少這是我迄今爲止關於內存管理所讀到的內容。我有一種印象,那就是在我返回到前一個視圖後,整個viewController的內容不會被銷燬。 – renesteg 2012-02-26 13:55:50
您可能需要檢查您訪問這些屬性的任何其他地方,並確保您沒有額外的保留位置。另外請確保在創建屬性時不要泄漏它。例如。這會導致泄漏:self.property = [[AClass alloc] init];無論如何,我描述的方法不會導致泄漏。 – 2012-02-26 14:08:26
已解決。忘記了alloc的autorelease。對象現在正在被釋放,當他們應該。但是我意識到了另外一種奇怪的行爲:當我開始我的主視圖時,一看到約400個分配對象,只要顯示視圖,儀器中的分配計數器突然增加到6,000多。可能是正常的,所以如果沒有什麼可以解決的話,不要再開始追逐幽靈。 想法?有沒有可用於這種事情的基準? Wuld理解這一點非常有幫助,因爲視圖本身當然也會創建對象本身。謝謝。 – renesteg 2012-02-26 15:33:59