2012-09-06 44 views
3

我使用CGColorSpaceRef當我釋放它,它的崩潰。 我創建它,並釋放Iphone應用程序崩潰時釋放CGColorSpaceRef

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

做一些任務後,然後釋放由編譯器顯示

CGColorSpaceRelease(colorSpace); 

錯誤是 路「斷言失敗:(國有> is_singleton!),功能color_space_state_dealloc,文件ColorSpaces/CGColorSpace.c,第127行「 奇怪的事情發生時,我沒有釋放色彩空間或只是設置爲無它的工作正常,我不知道爲什麼會發生這種情況。 請幫助我。提前致謝。 祝您有個愉快的一天。

+0

我們已經發布了這個蘋果文檔提到:https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGColorSpace/Reference/reference.html – josh

+2

'CGColorSpaceRelease'在' CGColorSpaceCreateXXX'。所以問題一定是你在這些調用之間做了什麼。 –

回答

4

看起來你已經發布了colorspace對象。我剛剛運行以下程序,並收到引用的錯誤消息。

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 

     CGColorSpaceRelease(colorspace); 
     CGColorSpaceRelease(colorspace); 
    } 
} 

SIGABRT s的以下錯誤:

Assertion failed: (!state->is_singleton), function color_space_state_dealloc, file ColorSpaces/CGColorSpace.c, line 127. 

如果我只叫CGColorSpaceRelease一旦程序編譯無誤的運行。

靜態分析器(Shift-Cmd-B)很可能會顯示你出錯了。它肯定會在第二個CGColorSpaceRelease調用上標記上面的代碼和「引用計數對象在它被釋放後使用」。

+0

與你同意!問題是當它被一次又一次地調用,但有沒有什麼辦法可以在Colorspace上找到保留計數器,以使其= 0,然後我不會釋放色彩空間? – josh

+2

您可以使用'CFGetRetainCount(colorspace)'來獲得保留計數,但是在使用這個之前,你應該看到https://web.archive.org/web/20160111073519/http://whentouseretaincount.com/(don' t忘記向下滾動)。你將遇到的問題是,創建後'colorspace'變量的保留計數是2,在釋放後它是1,但如果你再次釋放,你會得到錯誤。 – mttrb

+0

鑑於Nenad發現的帖子,您可能不得不發佈「色彩空間」並忍受內存泄漏。 – mttrb

-3

您正試圖釋放一個常數值。不能這樣做

+0

蘋果文檔中提到它應該被釋放。 https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGColorSpace/Reference/reference.html – josh

+0

@stackmonster如果你確定返回的值是一個常量,那麼'CGColorSpaceCreateDeviceRGB()'函數沒有遵循Apple的Core Foundation內存管理規則。你能否提供一個關於你爲什麼認爲這是一個常數的參考? – mttrb

+0

是啊,它在你的錯誤信息:斷言失敗:(!state-> is_singleton), –

1

如果需要,您實際上負責保留和釋放色彩空間!即如果你需要,保留它。如果你不需要保留,不要放棄!請參閱該文檔以獲得更多關於這個話題:Memory Management Programming Guide for Core Foundation

更新:

關於有線錯誤我們的海報上面enecountered,看看ddopsons發佈here。不幸的是,沒有提供解決方案,而是一種可能的解決方法。

+0

設備相關的RGB色彩空間。您負責通過調用CGColorSpaceRelease釋放此對象。如果不成功,返回NULL。 看到這個鏈接https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGColorSpace/Reference/reference.html – josh

+0

CGColorSpaceCreateDeviceRGB遞增保留計數! – josh

+2

@Nenad Mihajlovic我不確定你想要什麼點make你引用的文檔說你擁有名稱中帶'create'的函數返回的對象,'CGColorSpaceCreateDeviceRGB()'已經創建了名稱,所以OP需要釋放顏色空間的假設似乎是正確的。 – mttrb