不,你不需要調用CGImageRelease()
由ALAssetRepresentation
的便利方法,如fullResolutionImage
或fullScreenImage
返回CGImageRef
。不幸的是,目前這些方法的文檔和頭文件沒有說清楚。
如果您使用CGImageCreate*()
函數之一自己創建CGImageRef
,則您擁有該函數並負責使用CGImageRelease()
釋放該圖像ref。相比之下,由fullResolutionImage
和fullScreenImage
返回的CGImageRef
似乎是「自動釋放」的,因爲您不擁有這些方法返回的圖像ref。例如,假設您嘗試這樣的事情在你的代碼:
CGImageRef newImage = [assetRep fullResolutionImage];
...
UIImage *cloudImage = [UIImage imageWithCGImage:newImage
scale:scale orientation:orientation];
CGImageRelease(newImage);
如果你運行靜態分析儀,它會發出的CGImageRelease(newImage);
線以下警告:引用計數的
不正確遞減未 由主叫方
注意在這一點上擁有的對象,你會得到這樣的警告,無論你的項目是否被設置爲使用手動引用計數或AR的C。
相反,對於的NSBitmapImageRep
的CGImage
方法的文檔,例如,使得一個事實,即返回的CGImageRef
會被自動釋放更加清晰:
返回一個核心圖形圖像對象
CGImage從接收器的當前位圖數據中獲取 。
- (CGImageRef)CGImage
返回值
返回基於接收器的 當前位圖數據的自動釋放CGImageRef
不透明的類型。
謝謝你的深思熟慮的答案。靜態分析儀。必須記得經常這樣做。 –
您只需要記住Core Foundation內存管理規則。如果函數名稱中包含「Create」,則管理其內存;如果沒有,那麼你不。 – fumoboy007
@ fumoboy007這個規則非常有用。 –