2010-05-07 54 views
3

在使用'ObjectAlloc'調試儀器時,我注意到爲renderInContext調用分配了7meme的內存,但它永遠不會被釋放。當我註釋掉renderInContext調用時,這不會發生,並且未來renderInContext調用不會繼續增加內存分配。renderInContext創建未立即釋放的內存

UIGraphicsBeginImageContext(contentHolder.bounds.size); 
[contentHolder.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

有沒有辦法強制這個內存被釋放?

+0

它可能是該圖層擁有的緩存。如果/當你釋放圖層時會發生什麼? – 2010-05-08 06:20:05

+0

我也面臨同樣的問題。有沒有人知道爲什麼它正在做內存泄漏? – 2010-12-22 11:02:30

+0

當我開始編譯4.2時,我的問題就消失了 – 2011-01-13 22:48:17

回答

1

我發現瞭如何釋放renderInContext內存。只需在主線程上運行調用renderInContext的方法,即可自動釋放分配的內存。

+1

我不確定爲什麼Apple在不允許我們使用UICetScreenImage的情況下不修復此問題,而UIGetScreenImage的速度快了10倍。如果我們捕獲一個Retina iPad,UI會因爲renderInContext阻塞主線程而滯後。 renderInContext非常慢,正如我在樂器中看到的那樣。 – mskw 2012-12-20 17:06:27

+0

除了renderInContext在非主線程上運行內存問題之外,它還無法在一些iOS 6視圖(如MKMap視圖或使用OpenGL ES的任何視圖(它將不會在主線程中捕獲地圖)中崩潰)發揮良好效果。它在視頻子系統內發生崩潰。 – mskw 2012-12-20 17:08:46