任何人都可以告訴我我在這裏有什麼問題嗎?方法返回一個核心基礎對象+1保留
2
A
回答
6
即使你可能已啓用ARC,只涵蓋可可/ Objective-C對象。 Core Foundation and Core Graphics API's are different,並且您仍然需要最終顯式釋放所創建的任何對象的內存。
在您的代碼中,您正在執行沒有均衡版本的「createCGIImage:
」。
一個版本是這樣的:
CGImageRelease(myImageRef)
所以,這樣做的權利,這樣做:
CGImageRef myImageRef = [context createCGImage: outputImage fromRect: outputImage.extent];
UIImage * imageTemp = [UIImage imageWithCGImage: myImageRef];
CGImageRelease(myImageRef);
1
ARC是無關緊要的,你正在處理一個的CoreFoundation對象。您需要將其分配給CGImageRef
變量,然後使用CFRelease(variableName)
釋放它。
即
CGImageRef cgImage = [context createCGImage:...];
// rest of your code here
CFRelease(cgImage);
1
的[context createCGImage:fromRect:]
方法返回一個保留CGImageRef
。該解決您的內存泄漏,你需要保存到CGImageRef
參考,並釋放它,當你用它做:
CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extend];
imageTemp = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
相關問題
- 1. 方法返回一個+1 Objective-C的對象保留計數
- 2. 核心基礎對象和保留/釋放消息
- 3. 調用函數'CFUUIDCreate'返回帶有+1保留計數的核心基礎對象
- 4. 核心基礎VS基礎或核心基礎+基金會
- 5. iPhone,方法返回+1保留計數的客觀c對象
- 6. LoadXMLByUrl:方法返回一個+1 Objective-C的對象保留計數
- 7. 基礎對象沒有方法基礎
- 8. 保留與核心基礎「自動釋放」
- 9. 對象與+0保留計數返回給呼叫方,其中一個+1(擁有)保留計數預計
- 10. 核心基礎和ARC
- 11. isKindOfClass的核心基礎?
- 12. Moq返回一個方法的對象
- 13. 核心數據返回1,即使有零個對象被提取
- 14. WCF:爲基礎對象返回派生對象(DataContractResolver)
- 15. 核心數據提取僅返回唯一的管理對象
- 16. 核心數據。因之取同一對象上返回null
- 17. 核心數據管理對象屬性保留
- 18. 返回基礎:Scrapy
- 19. 對象的潛在泄漏 - 調用函數'ABMultiValueCopyValueAtIndex'返回一個+1保留計數的Core Foundation對象
- 20. Require.Js + Backbone.js的:返回一個新的對象()爲對象方法
- 21. 如何在分配給基礎對象時保留指定的對象屬性?
- 22. NSLog的等效核心基礎
- 23. 核心數據模型基礎
- 24. 多處理Python核心基礎錯誤
- 25. C數據結構或核心基礎?
- 26. 方法返回Runnable對象
- 27. 將對象返回方法
- 28. 核心服務,核心基礎和核心數據有什麼區別?
- 29. 如何確保對象方法返回預期的對象?
- 30. 釋放分配的對象(方法保留具有+1保留計數的objective-c對象)
你編譯的ARC代碼ARC關閉? – dasblinkenlight
毫無疑問,您正在'createCGImage'中創建一個圖像,然後永遠不會釋放它。 – borrrden
@dasblinkenlight是的,我有土弧。 我使用imageTemp = [[UIImage imageWithCGImage:[上下文createCGImage:outputImage fromRect:outputImage.extent]] autorelease];但會得到警告「Object sent -autorelease too much times」 – bachle26