2012-05-30 53 views
1

過濾器效果顯示一些警告執行昂貴的取消壓縮操作!還有一些內存泄漏後適用於圖像?執行代價高昂的取消壓縮操作

我的代碼是: -

 CIImage *imagee = [Filter outputImage]; 
     CIContext *context = [CIContext contextWithOptions:nil]; 
     CGImageRef cgImage = [context createCGImage: 
           imagee fromRect: imagee.extent]; 
     UIImage *resultUIImage = [[UIImage alloc ]initWithCGImage: cgImage]; 
     image=resultUIImage; 
     CGImageRelease(cgImage); 
     cgImage=nil; 
     SaveImage=image; 
     [resultUIImage release]; 
+0

請參閱http://stackoverflow.com/questions/8172838/performing-a-costly-unpadding-operation-what-is-it-and-how-to-fix-it。在我的情況下,控制檯警告肯定不需要釋放上下文。 –

+0

準確的信息是什麼,它指向哪條線? –

回答

2

您還沒有釋放你的CIImage,這是最有可能在那裏把漏從(可可內存語義要求今後該類方法返回的對象與+0保留計數所以他們必須由來電者保留)。與此同時,您正在執行昂貴的圖像過濾。您會發現,圖像可能會填充一些額外的字節,以確保它們的行以第2個字節結尾。但爲了加載過濾器,iOS必須卸載圖像,這涉及進入並遍歷其字節以刪除填充,這需要一段時間。如果它不影響任何性能方面的東西,你總是可以在後臺線程上繪製。我不知道CIImage或UIImage有多安全,但Core Graphics通常是線程安全的。

+0

謝謝!但如何釋放CIContext? [CIContext發佈] ?? –

+0

是的,我認爲這是正確的方法。 – CodaFi

+0

[上下文釋放]使我的應用程序崩潰。 –