我的應用程序按特定順序從URL下載圖像,然後用戶查看它們。我有應用程序預先載入下一張圖像,並將舊圖像保存在緩存中。內存未被正確釋放?
此緩存基本上是一個NSMutableDictionary,其中的鍵與圖像ID相關聯。緩存中的每個對象也是一個帶有url,圖像URL,標題和NSData對象的NSDictionary。當我下載圖片時,我用這些元素將一個新的字典對象添加到緩存中。我像這樣存儲NSData對象:NSData * imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageurl]];然後我將這個對象添加到子字典對象。
大量的照片存儲和緩存後,這顯然佔用大量的RAM,所以我通過清除整個緩存來響應內存警告。問題是,無論我嘗試過什麼,都不會釋放RAM。物體消失(像他們應該),但不要退回RAM。我曾嘗試執行以下操作:
- 通過緩存詞典循環,釋放在孩子字典中的數據對象,那麼當所有項目都通過循環,清除所有緩存字典子對象。
- 通過緩存詞典循環,釋放孩子的字典,完成後刪除所有對象
- 即使在拆除所有對象,然後釋放整個緩存對象(然後重新創建它,因爲它仍然需要使用)
- 而釋放,刪除等
問題的其他隨機連擊是什麼,我都試過了釋放RAM。有沒有我做錯了釋放NSData對象的內存?
當您下載數據時,您使用什麼樣的緩存策略?您是否確認(即泄漏或分配)記憶確實正在泄漏或放棄? – 2010-11-27 08:16:36