我一直在四處搜尋,但如果在使用ARC(+ iOS6)時需要釋放核心圖形原語(CGMutablePathRef,CGPath,漸變等),還沒有找到明確的答案。使用ARC,需要發佈CGMutablePathRefs嗎?
我見過這個(silence a compiler warning about releasing a CGMutablePathRef object)和其他一些問題,但它們或者過時或者不完全清楚(至少對我而言)。
我一直在四處搜尋,但如果在使用ARC(+ iOS6)時需要釋放核心圖形原語(CGMutablePathRef,CGPath,漸變等),還沒有找到明確的答案。使用ARC,需要發佈CGMutablePathRefs嗎?
我見過這個(silence a compiler warning about releasing a CGMutablePathRef object)和其他一些問題,但它們或者過時或者不完全清楚(至少對我而言)。
是的。
粗略地說,只有NSObject
實例通過ARC處理。 ARC是一種編譯器機制,在需要時爲您添加release
/retain
。所以,它只適用於在非ARC情況下可以使用release
/retain
的情況。
這不包括通過malloc
分配的內存,也不包括低級框架(核心圖形,核心音頻等)。具體而言,通過低級框架分配的對象需要通過使用特定的方法(例如,CGImageRelease
等)來發布。
編輯:
核心基礎數據類型的一個非常特殊的情況下是免費電話橋接類型。在ARC之前的世界中,您可以安全地指定其對應的Objective-C類所期望的CF數據類型(例如,CFString代替NSString)。由於所有權語義不清楚,ARC禁止這樣做。因此,一組ARC指令可用於指定所有權信息(有關更多信息,請參閱this),但這不是免費橋接的CGPath
的情況(因爲它沒有在CGPath Reference中說明)。
順便說一句,對於所有的ARC懷疑是一個偉大的資源是this rich post of Mike Ash's。
+1請注意,免費橋接CF類可以在ARC控制下使用橋接類型轉換。 – 2013-03-06 18:13:30
@安德魯馬德森:謝謝。我將相關信息添加到了我的答案中,儘管它不適用於OP的情況。 – sergio 2013-03-06 18:24:52