2017-02-13 49 views
0

我有Core Data屬性是Binary Data類型。我們使用NSArchiver歸檔自定義對象的NSArray,然後將其保存在Core Data中。核心數據二進制數據類型加載不釋放內存

然後,當需要這些對象時,我們使用NSUnarchiver將它變回NSArray

問題在於它耗盡了大量的內存,而且由於某種原因,我永遠無法獲得它。解除數據存檔後,檢查一些對象,然後將NSArrayNSData對象設置爲零,則該內存永遠不會恢復。對許多Core Data實體執行相同的操作會導致永遠不會返回的巨大內存使用量。

爲什麼會出現這種情況,或者我可以釋放那些我明顯不再使用的內存?

編輯:

我已經做了沒有成功如下:

[managedObjectContext refreshObject:myObject mergeChanges:NO]; 
+0

只需添加其他信息。不是將NSArray歸檔爲數據,而是使用coredata中可用的TRANSFORMABLE數據類型。對於例子http://stackoverflow.com/questions/8682324/insert-nsdictionary-into-coredata/25891673#25891673 –

+0

你有沒有嘗試在'@ autoreleasepool'塊中執行該任務? – KrishnaCA

+0

@KrishnaCA是的,但這似乎沒有幫助。 –

回答

0

我得到了同樣的問題。當我使用NSUnarchiver解壓數據時,它會產生大量的臨時內存,並且臨時內存不會被釋放。 @KrishnaCA說,我通過添加@ autoreleasepool解決了這個問題。你添加的代碼不合適嗎?如果你顯示簡單的代碼,這有助於解決問題。

+0

你在哪裏添加它?圍繞你使用'NSUnarchiver'的代碼? –

+0

從NSUnarchiver開始使用,到最終使用NSUnarchiver獲得的數據。 –